Wordpressのデフォルトテーマ2010 1.1を使用すると、ショートコードはメインのブログページと個々の投稿ページで機能しますが、カテゴリページとアーカイブページでは削除されます。
たとえば、テーマのfunctions.phpを書き留めます。
add_shortcode('tsc', 'tsc_process_shortcode' );
function tsc_process_shortcode($atts, $content = null) {
return 'INSERTED TEXT ' . $content;
}
カテゴリページおよびアーカイブページに表示される投稿コンテンツの[tsc]からINSERTED TEXTが生成されません。カテゴリページとアーカイブページでショートコードを機能させるにはどうすればよいですか。
フィルタが適用される前に、ショートコードは抜粋から削除されます。もっとこのようなことを試してみてください。
function tsc_execute_shortcodes_in_excerpts( $text, $raw_text ){
if(empty($raw_text)){
$text = get_the_content('');
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$text = strip_tags($text);
$excerpt_length = apply_filters('excerpt_length', 55);
$excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
$words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
if ( count($words) > $excerpt_length ) {
array_pop($words);
$text = implode(' ', $words);
$text = $text . $excerpt_more;
} else {
$text = implode(' ', $words);
}
}
return $text;
}
add_filter( 'wp_trim_excerpt', 'tsc_execute_shortcodes_in_excerpts', 10, 2 );
それが最初にトリミングされているなら、それは基本的にコンテンツでwp_trim_excerpt()
を再実行します(ショートコード除去を除く)。ショートコードのみをターゲットにしたい場合は、get_the_content('')
の後に次のようなことをすることができます。
$text = str_replace( '[tsc', '{tsc', $text );
$text = strip_shortcodes( $text );
$text = str_replace( '{tsc', '[tsc', $text );
それが役立つことを願っています。
デフォルトの2010を使用していると仮定すると、アーカイブとカテゴリのループはthe_contentの代わりにthe_excerptを使用しているので、ショートコードが生成されないのは幸いなことです。
add_filter( 'the_excerpt', 'do_shortcode', 11 );
お役に立てれば。