私はこのショートコードを持っています:
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()
にはフィルタがないので、どうすればその振る舞いを変更できますか?
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 )