質問: ### 前提 エスケープされたショートコード(例:[[shortcode]])が記事本文の先頭にある場合、抜粋でそのショートコードが実行されてしまいます。 (また、普通のショートコードだとショートコードの部分が丸々消えてしまいます) ### 発生している問題・エラーメッセージ 例えば、以下のようにショートコードを登録し、 ``` function shortcode_test() { return 'ショートコード'; } add_shortcode('shortcode', 'shortcode_test'); ``` 投稿画面でこのように記述して公開するとします。 ``` WordPressには[shortcode]という便利なプラグインがあります。 ``` すると、本文では「WordPressにはショートコードという便利なプラグインがあります。」と表示されますが、抜粋では「WordPressにはという便利なプラグインがあります。」と表示されます。 ここからが本題ですが、以下のように投稿画面でエスケープしたショートコードを使うとします。 ``` ショートコードは[[shortcode]]と記述することで使えます。 ``` すると、先ほどと同じ理屈で、本文には「ショートコードは[shortcode]と記述することで使えます。」と表示されますが、抜粋では「ショートコードはショートコードと記述することで使えます。」と表示されてしまいます。 変なプラグインも使っていないんですが、これはWordPressの仕様なんでしょうか? みなさんの環境でも同じ動作をしますか? 何か対策をされていますか?(←これを知りたいです) ### 実現したいこと 本文と同じものを抜粋で表示したいです。 get_the_excerpt関数をどうにかできるのか、何かしらのフックがあるのか。。 お知恵をお借りできれば幸いです。 ### 補足 説明がわかりづらかったため質問を修正しました。
回答: 以下のコードを追加して ``` function custom_excerpt() { global $post; $content = $post->post_content; $content = strip_shortcodes( $content ); $content = strip_tags( $content ); $content = str_replace( array( '\r\n', '\n', '\r', ' ' ), '', $content ); $content = mb_substr( $content, 60 ); echo $content; } ``` 抜粋表示部分を`custom_excerpt()`に置き換えたらどうなりますか? ### 追記 `[[shortcode]]`と入力した文字が抜粋表示(excerpt)では意向を無視して`ショートコード`と表示されるという意味だったんですね? ショートコードの使い方を説明するページだとしたら`[shortcode]`と表示されないと困りますね。 解決済ですが`the_excerpt()`や`get_the_excerpt()`をカスタマイズする例も書いておきます。 尚、エスケープ不要です。 出力は`echo get_the_excerpt()`か`the_excerpt()`で。 ``` function my_excerpt() { $excerpt = get_the_content(); $excerpt = wp_strip_all_tags( $excerpt ); $excerpt = str_replace( array( '\r\n', '\n', '\r', ' ' ), '', $excerpt ); $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[...]' ); $excerpt = wp_trim_words( $excerpt, '60', $excerpt_more ); return $excerpt; } add_filter( 'wp_trim_excerpt', 'my_excerpt' ); ```