サポート » 使い方全般 » RSSにカスタムフィールドの値を追加したい

  • 解決済 ateliershin

    (@ateliershin)


    いつもお世話になっております。

    カスタムフィールドで設定した値をRSSフィードに加えたいのですが、やり方がわかりません。
    どなたかご存じであれば教えて頂けないでしょうか。

    ちなみに以下投稿は見つけたのですが、やってみたところうまく動きませんでした。。
    カスタムフィールドの内容をRSS配信できますか?

    ここ数日調べたところ、出来たのは(出来たのかわかりませんが(汗)
    1. functions.php(テーマ配下)に以下を記述し、theme配下にカスタマイズ可能なphpファイルを用意する

    // アクションフック リムーブ
    remove_filter('do_feed_rdf', 'do_feed_rdf', 10);
    remove_filter('do_feed_rss', 'do_feed_rss', 10);
    remove_filter('do_feed_rss2', 'do_feed_rss2', 10);
    remove_filter('do_feed_atom', 'do_feed_atom', 10);
    
    // アクションフック 追加
    function custom_feed_rdf() {
        $template_file = '/feed-rdf.php';
        $template_file = ( file_exists( get_template_directory() . $template_file )
            ? get_template_directory()
            : ABSPATH . WPINC
            ) . $template_file;
        load_template( $template_file );
    }
    add_action('do_feed_rdf', 'custom_feed_rdf', 10, 1);
    
    function custom_feed_rss() {
        $template_file = '/feed-rss.php';
        $template_file = ( file_exists( get_template_directory() . $template_file )
            ? get_template_directory()
            : ABSPATH . WPINC
            ) . $template_file;
        load_template( $template_file );
    }
    add_action('do_feed_rss', 'custom_feed_rss', 10, 1);
    
    function custom_feed_rss2( $for_comments ) {
        $template_file = '/feed-rss2' . ( $for_comments ? '-comments' : '' ) . '.php';
        $template_file = ( file_exists( get_template_directory() . $template_file )
            ? get_template_directory()
            : ABSPATH . WPINC
            ) . $template_file;
        load_template( $template_file );
    }
    add_action('do_feed_rss2', 'custom_feed_rss2', 10, 1);
    
    function custom_feed_atom( $for_comments ) {
        $template_file = '/feed-atom' . ( $for_comments ? '-comments' : '' ) . '.php';
        $template_file = ( file_exists( get_template_directory() . $template_file )
            ? get_template_directory()
            : ABSPATH . WPINC
            ) . $template_file;
        load_template( $template_file );
    }
    add_action('do_feed_atom', 'custom_feed_atom', 10, 1);

    2.先述の投稿にあった通り、同functions.php内にカスタムフィールドの情報を取得する新しいフィルターを記述

    function my_content_feed($content, $feed_type){
      $meta1 = get_post_meta($post->ID, 'img_thumb', true);
      $meta2 = get_post_meta($post->ID, "title", $single = true);
      $meta3 = get_post_meta($post->ID, 'lead', $single = true);
    
      return $content . $meta1  . $meta2 . $meta3;
    }
    add_filter('the_content_feed', 'my_content_feed', 10, 2);
    
    function my_excerpt_rss($output){
      $meta1 = get_post_meta($post->ID, 'img_thumb', true);
      $meta2 = get_post_meta($post->ID, "title", $single = true);
      $meta3 = get_post_meta($post->ID, 'lead', $single = true);
      return $output . $meta1  . $meta2 . $meta3;
    }
    add_filter('the_excerpt_rss', 'my_excerpt_rss');

    自分の認識ではこれによって

    ・descriptionの部分で呼び出された関数「the_excerpt_rss」が「my_excerpt_rss」にフック?されて呼び出され、上記$meta情報を取得し戻す(return)

    と認識しているのですが・・うまくいってないです。

    もう少し言えば、テーマ配下のrss関連ファイルを作り制御できたはずなのですが、修正しても修正内容が上手く反映されず・・かといってちょっと変えるとエラーが出たり。。

    wp-include配下の本体のrssファイルとどっちも見ているのか。。と不安です。
    ご教授の程宜しくお願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • kurosquare

    (@kurosquare)

    カスタマイズ可能なphpファイルのソースはをかもとさんの以下の記事ですか?
    http://dogmap.jp/2009/04/30/switching-feed-template/
    まず、カスタムフィールドの値を取得するのに直接は関係ないので、これはいじらないでよいと思います。

    descriptionの部分で呼び出された関数「the_excerpt_rss」が「my_excerpt_rss」にフック?されて呼び出され、上記$meta情報を取得し戻す(return)

    関数内で$post->IDが取得できなさそうです。
    美しい回答とは言えませんが、$postをグローバル変数にすれば取得できます。

    function my_excerpt_rss($output){
     global $post;
      $meta1 = get_post_meta($post->ID, 'img_thumb', true);
      return $content . $meta1;
    }

    wokamoto

    (@wokamoto)

    カスタマイズ可能なphpファイルのソースはをかもとさんの以下の記事ですか?
    http://dogmap.jp/2009/04/30/switching-feed-template/
    まず、カスタムフィールドの値を取得するのに直接は関係ないので、これはいじらないでよいと思います。

    そうっすね、これはフィードのテンプレートを変更する方法です。
    今回の要望では、ここまでやる必要は無いと思います。
    kurosquare さんの方法で良いかと。

    蛇足ですが、これプラグインにして公式ディレクトリに公開してあります。
    http://wordpress.org/extend/plugins/feed-template-customize/
    http://dogmap.jp/2011/06/28/feed-template-customize/

    ateliershin

    (@ateliershin)

    >kurosquareさん、wokamotoさん

    ご回答ありがとうございます!どうにもこうにもいかないところなので大変助かりました!
    そして・・進捗です。
    $postをグローバル変数宣言する事で関数側は問題なさそう!ですが、なんと一度フィードの伝プレート化のために追加したテーマフォルダ配下の「feed-rss2.php」をずっと見てしまってエラーが出ています。。

    WordPressで ?feed=rss2を加え表示させた際のエラー

    Missing argument 1 for my_excerpt_rss(), called in (フォルダ名)/wp-content/themes/tokyo/feed-rss2.php on line 46 and defined in <b> (フォルダ名)//wp-content/themes/tokyo/functions.php

    descriptionに入れている概要はきれいに消えているので途中まではうまくいってそうですが。。

    function.phpからも関数を削除し、テーマフォルダからもfeed-rss2.phpファイルは消しているのですが同エラーがずっと発生しています。

    ところでGoogleリーダでrss読み込みさせると、今度はdescriptionの内容が何事もなかったように読み込まれ、カスタムフィールドは無視されています。。なんでしょう。。

    原因ご存じであれば教えて頂けないでしょうか。
    勉強不足で大変申し訳ございません。

    その後2週間以上かかってしまいましたが、、何とかできました!
    実際にはカスタムフィールド部分だけ表示させたかったので

    return $content . $meta1  . $meta2 . $meta3;

    return $meta1  . $meta2 . $meta3;

    に変更しました。カスタムフィールド部分で取得したimgのパスも関数内に書きました。

    今回時間がかかったのは、GoogleReaderやThunderBirdのRSSリーダー等でキャッシュを持っており、Wordpress側のソースをいじっても即時反映されなかったのでデバッグができなかったのが理由です(汗

    FeedBurnerを使って、編集したらフィードを削除→登録を繰り返してデバッグしてやってました。

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

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「RSSにカスタムフィールドの値を追加したい」には新たに返信することはできません。