web-dev-qa-db-fra.com

Ajouter des champs personnalisés au type de publication personnalisé RSS

J'aimerais ajouter des champs personnalisés dans mon type d'article personnalisé au flux RSS de ce type d'article situé à l'adresse http://example.com/feed/?post_type=my_custom_post_type } _

J'ai vu des informations sur cette opération pour le flux régulier, mais rien sur la manière de réécrire le flux de type de post personnalisé.

J'aurai besoin d'ajouter 10 à 15 éléments au flux (1er acte, 2ème acte, 3ème acte, prix, lien d'achat ...)

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

Vous devriez pouvoir remplacer toutes les autres méta-valeurs que vous devez ajouter au flux.

19
prettyboymp

Bonjour @curtismchale:

Piggybacking off @ prettyboymp's excellente réponse, voici comment vous pouvez créer plusieurs champs personnalisés (j'en ai fait 3, vous pouvez en faire plus):

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. Assurez-vous de donner les accessoires de @prettyboymp car je ne savais pas comment faire cela avant sa réponse. Je réponds juste parce que je ne sais pas combien de temps il faudra avant qu'il ne revienne, alors j'ai décidé de vous donner une réponse entre-temps.

17
MikeSchinkel

MERCI MERCI pour cette excellente information.

Je voulais étendre ce que les deux autres ont déjà écrit ... Pour que cela soit validé, vous devez disposer d'un espace de noms personnalisé. Voici comment vous faites cela:

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

Et puis préfixez l'élément de nom de champ avec l'espace de noms personnalisé. Dans cet exemple, j'ai utilisé "mycustomfields". Voir ci-dessous:

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

Sur une note de côté, vous pouvez utiliser une action pour vous accrocher à l’un des 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