カスタム投稿タイプRSSへのカスタムフィールドの追加


17

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

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

フィードに10〜15個のアイテムを追加する必要があります(第1幕、第2幕、第3幕、価格、購入リンク...)

回答:


20
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');

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


1
だから、各メタキー(おそらく10前後)の投稿タイプチェックにアイテムを追加し、それをテンプレートに呼び出す必要がありますか?投稿IDを使用してメタ値領域でget_post_metaを呼び出すことはできませんか?
curtismchale

2
いい答え!
MikeSchinkel

@curtismchale、私は最も単純な答えを含めました。あなたがそのような多くの分野を引っ張っているなら、私はおそらく@mikeschinkelの答えのようなもっとフォーマットされたもので行くでしょう。
prettyboymp

19

こんにちは@curtismchale:

@prettyboympの優れた答えをピギーバックして、私のスピンを使って、複数のカスタムフィールドを行う方法を次に示します(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";
  }
}

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


7

この素晴らしい情報に感謝します。

他の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');

ここに表示されるもの:Jetpackは、xmlns:geoおよびxmlns:georss名前空間を広告します。Jetpackを使用している場合、これらを追加する必要はありません。
マスタババ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.