web-dev-qa-db-ja.com

カスタム投稿タイプRSSにカスタムフィールドを追加する

カスタム投稿タイプのカスタムフィールドを http://example.com/feed/?post_type=my_custom_post_type にあるその投稿タイプのRSSフィードに追加します。

通常のフィードに対してこれを行う方法についての情報を見ましたが、カスタム投稿タイプのフィードを書き換える方法については何もしていません。

フィードに10 - 15項目を追加する必要があります(第1幕、第2幕、第3幕、価格、購入リンク...)

16
curtismchale
function add_custom_fields_to_rss() {
    if(get_post_type() == 'my_custom_post_type' && $my_meta_value = get_post_meta(get_the_ID(), 'my_meta_key', true)) {
        ?>
        <my_meta_value><?php echo $my_meta_value ?></my_meta_value>
        <?php
    }
}
add_action('rss2_item', 'add_custom_fields_to_rss');

フィードに追加する必要がある他のメタ値を置き換えることができるはずです。

19
prettyboymp

こんにちは @curtismchale:

@ prettyboymp's すばらしい答え、ここでは、複数のカスタムフィールドを作成する方法を説明します(私は3つを追加しましたが、もっと可能です)。

add_action('rss2_item', 'yoursite_rss2_item');
function yoursite_rss2_item() {
  if (get_post_type()=='my_custom_post_type') {
    $fields = array( 'field1', 'field2', 'field3' );
    $post_id = get_the_ID();
    foreach($fields as $field)
      if ($value = get_post_meta($post_id,$field,true))
        echo "<{$field}>{$value}</{$field}>\n";
  }
}

P.S私は彼の答えの前にこれを行う方法がわからなかったので、@ prettyboymp小道具を必ず与えてください。彼が戻るまでにどれぐらいの時間がかかるのかわからないので、私も答えています。その間に答えを出すことにしました。

17
MikeSchinkel

このすばらしい情報についてありがとうございます。

他の2つがすでに書いたものを拡張したいのですが…これを検証するためには、カスタム名前空間が必要です。これを行う方法は次のとおりです。

/* IN ORDER TO VALIDATE you must add namespace   */
add_action('rss2_ns', 'my_rss2_ns');
function my_rss2_ns(){
    echo 'xmlns:mycustomfields="'.  get_bloginfo('wpurl').'"'."\n";
}

そして、フィールド名の項目にカスタム名前空間を接頭辞として付けます。この例では、 "mycustomfields"を使用しました。下記を参照してください。

/*  add elements    */
add_action('rss2_item', 'yoursite_rss2_item');
function yoursite_rss2_item() {
  if (get_post_type()=='my_custom_post_type') {
    $fields = array( 'field1', 'field2', 'field3' );
    $post_id = get_the_ID();
    foreach($fields as $field)
      if ($value = get_post_meta($post_id,$field,true))
        echo "<mycustomfields:{$field}>{$value}</mycustomfields:{$field}>\n";
  }
}

サイドノートでは、3つのうちのどれにでもフックするアクションを使うことができます

    rss2_ns : to add a specific namespace
            add_action('rss2_ns', 'my_rss2_ns');

    rss2_head : to add tags in the feed header
            add_action('rss2_head', 'my_rss2_head');

    rss2_item : to add tags in each feed items
            add_action('rss2_item', 'my_rss2_item');
7
Acts7