programing

포스트 컨텐츠에서 WordPress 숏코드 속성을 추출하는 방법

muds 2023. 10. 13. 22:34
반응형

포스트 컨텐츠에서 WordPress 숏코드 속성을 추출하는 방법

워드프레스의 내 게시물에는 알 수 없는 유형의 숏코드가 있습니다.my_player갈고리를 만들고 정확하게 추가한 것입니다.컨텐츠와 쇼트코드명에 전달할 수 있는 워드프레스 함수의 종류가 있는지 궁금합니다. 속성명에 따라 색인화된 속성을 가진 일치된 쇼트코드 배열을 제공할 수 있습니다.아래에 있는 내 코드 같은 것들...

$matches = get_shortcode_matches($content, "my_player");

for($i = 0; $i < sizeof($matches); $i++)
{
    $title = $matches[$i]['title'];
    $mp3 = $matches[$i]['mp3'];
    $soundcloud = $matches[$i]['soundcloud'];
}

당신이 쇼트코드를 위한 후크를 만들 때, 나는 그것을 알고 있습니다.add_shortcode()함수는 위의 제가 가지고 있는 것처럼 지수화된 값을 사용할 수 있지만 나중에 루프 밖에서 접근할 수 있는 함수가 필요합니다.워드프레스에 그런 기능이 있습니까?

이를 수행하는 데는 여러 가지 방법이 있습니다. 1.위와 같이 자신의 토막글을 작성하고 "mu-plugins(뮤 플러그인)" 폴더에 다음을 삽입합니다.

// [myplayer attr="your-value"]
function myplayer_func($atts) {
    extract(shortcode_atts(array(
        'title' => 'something',
        'mp3' => 'another something',
                'soundcloud' => 'something else',
    ), $atts));

    return "attr= {$attr}";
}
add_shortcode('myplayer', 'myplayer_func');

그리고나서

[myplayer title="something" mp3="another something" soundcloud="something else"]

하위 도메인을 포함한 모든 게시물에서. 2.ShortcoderGlobal Content Blocks와 같은 플러그인을 사용할 수 있습니다.

저는 당신이 기존의 행동을 사용해서는 안 된다고 생각합니다.[shortcode_parse_atts]에 연결된 이벤트가 없습니다.사용자가 할 수 있는 유일한 방법은 add_action/global value입니다. [add_shortcode]와 관련된 모든 함수/메소드에서.

다음과 같은 것:

function doShortCode($atts, $content=null){
    global $my_shortcode_storage;
    $my_shortcode_storage['my_shortcode_1'][] = $atts;
}

저도 아무것도 찾을 수가 없어서 직접 만들었습니다.우선 숏코드에서 속성을 제대로 꺼내기 위해 다음과 같은 함수를 만들었습니다.

function eri_shortcode_parse_atts( $shortcode ) {
    // Store the shortcode attributes in an array here
    $attributes = [];

    // Get all attributes
    if (preg_match_all('/\w+\=\".*?\"/', $shortcode, $key_value_pairs)) {

        // Now split up the key value pairs
        foreach($key_value_pairs[0] as $kvp) {
            $kvp = str_replace('"', '', $kvp);
            $pair = explode('=', $kvp);
            $attributes[$pair[0]] = $pair[1];
        }
    }

    // Return the array
    return $attributes;
}

그런 다음 쇼트 코드의 모든 반복을 페이지에서 검색할 수 있도록 다음과 같은 기능을 만들었습니다.

function eri_get_shortcode_on_page( $post_id, $shortcode ) {
    // Get the post content once
    $content = get_the_content( null, false, $post_id );
    // $content = apply_filters( 'the_content', get_the_content( null, false, $post_id ) ); // Alternative if get_the_content() doesn't work for whatever reason

    // Double check that there is content
    if ($content) {

        // Shortcode regex
        $shortcode_regex = '/\['.$shortcode.'\s.*?]/';

        // Get all the shortcodes from the page
        if (preg_match_all($shortcode_regex, $content, $shortcodes)){
            
            // Store them here
            $final_array = [];
            
            // Extract the attributes from the shortcode
            foreach ($shortcodes[0] as $s) {
                $attributes = eri_shortcode_parse_atts( $s );

                // The return the post
                $final_array[] = $attributes;
            }

            // Return the array
            $results = $final_array;

        // Otherwise return an empty array if none are found
        } else {
            $results = [];
        }

        // Return it
        return $results;
    } else {
        return false;
    }
}

이거 먹어봐요.

<?php do_shortcode($content); ?>

언급URL : https://stackoverflow.com/questions/20624785/how-to-extract-wordpress-shortcode-attributes-from-post-content

반응형