サポート » 使い方全般 » ショートコード使用時のRSS

  • 解決済 uuuum

    (@uuuum)


    お世話になります。
    記事本文にショートコードを使用て
    「この記事は[ca]についての記事です」と
    文字を出力しているのですが、RSSだと
    「この記事はについての記事です」と
    ショートコード文字が消えてしまいます。
    どうぞよろしくご教授をお願いします。

    functions.phpのショートコード用PHPは下記になります。

    function myca( $atts ){
    $cats = get_the_category();
    if ( $cats ){foreach($cats as $cat) {$ca .= $cat->name.",";}
    return rtrim($ca,",");
    }}
    add_shortcode( 'ca', 'myca' );

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • WordPress標準のショートコード、例えば [gallery] などでも消えてしまいますか?もしそうなら、ためしにプラグインをすべて停止してみるとどうでしょう。それでも変わりなければ、テーマを例えばTwentv Sixteenに変えて自作ショートコードだけをfunctions.phpへ加えて、違いをみては?

    追記:もし「カテゴリーが何もついていない投稿や固定ページ」なら、消えますね。

    gblsm様

    回答ありがとうございます。
    回答の通り試してみました。
    1、[gallery]で記事に画像を表示し、RSSで
    確認しましたが、画像が消えていました。
    2、プラグインをすべて停止してみましたが
    RSSでは文字が表示されませんでした。
    3、テーマの件ですが元々Twentv Sixteenを
    使用しています。
    追記の件、記事には必ずカテゴリーを設定しています。
    「この記事は[ca]についての記事です」は
    ページ上では「この記事はサプリメントについての記事です」となり
    RSSでは「この記事はについての記事です」となります。

    検証ありがとうございました。

    WordPress の内部処理を確かめたところ、フィードの抜粋部分(投稿本文を抜粋したもの)では必ずショートコードを削除する仕様になっていました。これは WordPress コアがフィードの抜粋を取得する関数 the_excerpt_rss() → get_the_excerpt() の中で、フィルター ‘get_the_excerpt’ を通して呼び出される関数 wp_trim_excerpt() によって行われています。この wp_trim_excerpt() を改造すればショートコードを展開してフィードへ出すことができると思いますが、私には難しいです。

    別案として、設定 > 表示設定 > RSS/Atom フィードでの各投稿の表示 で「全文を表示」を選択すると、抜粋はショートコードが消されますが、フィードに出力される全文の方はショートコードが展開されます。

    gblsm様

    回答ありがとうございます。
    RSS/Atom フィードの抜粋がショートコードを削除する仕様だったとは
    考えもしませんでした。大変勉強になりました。
    wp_trim_excerpt() にdo_shortcodeが使えないか調べてみます。

    別案の件ですが、過去にRSSを全文表示にしていたら記事を盗まれていた
    経験があるので躊躇しています。
    もし、どうしようもない時はRSSを全文表示にしたいと思います。
    ありがとうございました。

    抜粋がショートコードを削除するのは、フィードだけではなく画面表示のテンプレートでもふつうは同様です。テーマに含まれる、日付やカテゴリーのアーカイブ、検索結果一覧などのテンプレートで関数 the_excerpt() を使っているものは、同じように抜粋からショートコードが削除されます。

    gblsm様

    回答ありがとうございます。
    試しにテーマを変更してみたら、各アーカイブの抜粋でも
    ショートコードが表示されないことがわかりました。
    今まで普通だと思っていましたがTwentv Sixteenは
    何か特別な処理を行っているのかもしれません。
    Twentv Sixteenのfunctions.phpを調べてみます。
    ありがとうございました。

    gblsm様に頂いたヒントを元に、調べたところ
    下記PHPをfunctionsに追加する事で解決しました。

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

    gblsm様、ありがとうございました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「ショートコード使用時のRSS」には新たに返信することはできません。