Benutzerdefinierte Felder zu benutzerdefiniertem Beitragstyp-RSS hinzufügen


17

Ich möchte dem RSS-Feed für diesen Beitragstyp benutzerdefinierte Felder in meinem benutzerdefinierten Beitragstyp hinzufügen, der sich unter http://example.com/feed/?post_type=my_custom_post_type befindet

Ich habe Informationen dazu für den regulären Feed gesehen, aber nichts darüber, wie man den benutzerdefinierten Beitragstyp-Feed umschreibt.

Ich muss 10 - 15 Artikel zum Feed hinzufügen (1. Akt, 2. Akt, 3. Akt, Preis, Kauflink ...)

Antworten:


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

Sie sollten in der Lage sein, andere Metawerte zu ersetzen, die Sie zum Feed hinzufügen müssen.


1
Müsste ich also für jeden Metaschlüssel (wahrscheinlich um die 10) einen Eintrag zur Überprüfung des Post-Typs hinzufügen und ihn dann in die Vorlage aufrufen? Sie können nicht einfach get_post_meta im Meta-Wertebereich mit der Post-ID aufrufen?
Curtismchale

2
Gute Antwort!
MikeSchinkel

@curtismchale, ich habe nur die einfachste Antwort eingefügt. Wenn Sie in so vielen Feldern ziehen, würde ich wahrscheinlich mit etwas gehen, das eher wie die Antwort von @ mikeschinkel formatiert ist.
prettyboymp

19

Hallo @curtismchale:

Piggybacking off @ prettyboymps ausgezeichnete Antwort, mit meinem Dreh darauf, hier ist, wie Sie mehrere benutzerdefinierte Felder machen können (ich habe 3, Sie können mehr machen):

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 Vergiss nicht, @prettyboymp Requisiten zu geben, da ich vor seiner Antwort nicht wusste, wie ich das machen soll. Ich antworte auch nur, weil ich nicht sicher bin, wie lange es dauern wird, bis er zurückkommt. Ich habe beschlossen, Ihnen in der Zwischenzeit eine Antwort zu geben.


7

DANKE DANKE für diese hervorragende Information.

Ich wollte erweitern, was die anderen beiden bereits geschrieben haben ... Damit dies überprüft werden kann, muss ein benutzerdefinierter Namespace vorhanden sein. So machen Sie das:

/* 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";
}

Und dann stellen Sie dem Feldnamenelement den benutzerdefinierten Namespace voran. In diesem Beispiel habe ich "mycustomfields" verwendet. Siehe unten:

/*  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";
  }
}

Nebenbei bemerkt, Sie können eine Aktion verwenden, um sich in eine der 3 einzuklinken

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

Für diejenigen, die hier auftauchen: Jetpack zeigt die Namespaces xmlns: geo und xmlns: georss an. Sie müssen diese nicht hinzufügen, wenn Sie Jetpack verwenden.
MastaBaba
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.