例えば、Amazonのアソシエイトリンクを生成するショートコードを記事の先頭の方に記載すると、記事一覧ページの抜粋部分にショートコードが含まれることがあります。
抜粋で記事内のショートコードを実行するには、以下のようにします。
//ショートコード function amazon_link($params = array()) { extract(shortcode_atts(array( 'asin' => '', 'title' => '' ), $params)); $html = ''; $html .='<a href="http://www.amazon.co.jp/dp/' . $asin . '?tag=trakingid">' . $title . '</a>'; return $html; } add_shortcode('amazon', 'amazon_link'); //抜粋でショートコードを実行する remove_filter( 'get_the_excerpt', 'wp_trim_excerpt' ); //Remove the filter we don't want add_filter( 'get_the_excerpt', 'fergcorp_wp_trim_excerpt' ); //Add the modified filter add_filter( 'the_excerpt', 'do_shortcode' ); //Make sure shortcodes get processed //Copy and paste from /wp-includes/formatting.php:2096 function fergcorp_wp_trim_excerpt($text = '') { $raw_excerpt = $text; if ( '' == $text ) { $text = get_the_content(''); //$text = strip_shortcodes( $text ); //Comment out the part we don't want $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); }
抜粋の文字数を変更する場合は$excerpt_length = apply_filters(‘excerpt_length’, 55);の「55」部分を変更します。
参考
Using Shortcodes in the_excerpt – Andrew Ferguson dot NET