web-dev-qa-db-ja.com

Strip_shortcodes()がショートコード内のコンテンツを削除するのを防止

私はこのショートコードを持っています:

add_shortcode('refer', function($atts, $text)
{
    $defaults = ['link' => '', 'nofollow' => true];
    $atts     = shortcode_atts($defaults, $atts, 'refer' );
    $nofollow = $atts['nofollow'] ? 'rel="nofollow"' : 'external';

    return sprintf('<a href="%s" %s>%s</a>', esc_url($atts['link']), $nofollow, $text);
});

デモ投稿コンテンツ付き:

[参照link = "http://www.lipsum.com"] Lorem Ipsum [/ refer]は、印刷および植字業界の単なるダミーテキストです。 [参照リンク= "http://www.lipsum.com"] Lorem Ipsum [/ refer]は、未知のプリンターがタイプのギャレーを取り、タイプ標本を作るためにそれをスクランブルした1500年代以来ずっと、標準のダミーテキストです。本。それは5世紀だけでなく、電子組版への飛躍も生き残り、本質的に変わっていません。 1960年代にLorem Ipsum [/ refer]パッセージを含むLetrasetシート、そして最近ではAldus PageMakerのようなデスクトップパブリッシングソフトウェアがリリースされて広く普及しました。 Lorem Ipsum.

抜粋をエコーアウトするためのループ:

while ( have_posts() ) : the_post();
    the_excerpt();
endwhile;

結果:

印刷および組版業界の単なるダミーテキストです。未知のプリンターがタイプのギャレーを取り、タイプ見本帳を作るためにそれをスクランブルしたとき、1500年代以来ずっと標準的なダミーテキストでした。それは5世紀だけでなく、電子組版への飛躍も生き残り、本質的に変わっていません。 […]

Lorem Ipsumの単語はすべて抜粋から削除されています。

the_excerpt() や他の関連する関数を見た結果、問題が strip_shortcodes() inside wp_trim_excerpt 関数によって引き起こされていることがわかりました。

しかしstrip_shortcodes()にはフィルタがないので、どうすればその振る舞いを変更できますか?

3
MinhTri

functions.phpのフィルタを試してください。

add_filter( 'the_excerpt', 'shortcode_unautop');
add_filter( 'the_excerpt', 'do_shortcode');

小道具:@bainternet( ソース

または、get_the_excerptに独自のフィルタを使用します。これをあなたのテーマのfunctions.phpに入れてください。

function custom_excerpt($text = '') {
    $raw_excerpt = $text;
    if ( '' == $text ) {
        $text = get_the_content('');
                // $text = strip_shortcodes( $text );
        $text = do_shortcode( $text );
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        $excerpt_length = apply_filters('excerpt_length', 55);
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
        $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
    }
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}
remove_filter( 'get_the_excerpt', 'wp_trim_excerpt'  );
add_filter( 'get_the_excerpt', 'custom_excerpt'  );

これはthe_excerpt()のショートコードを許可します。

@keesiemeijerへの小道具( source

4
Mayeenul Islam