Синдицирование пользовательских полей в Wordpress через RSS - PullRequest
1 голос
/ 02 сентября 2011

Интересно, если бы я мог задать вопрос Wordpress / RSS, я не смог бы найти ответ здесь,

Попытка синдицировать сообщения через RSS в Wordpress, используя плагин FeedWordpress в качестве агрегатора RSS, каждое сообщениев исходный блог включены пять настраиваемых полей, которые важны для его функциональности Темы (исходный и объединяющий / принимающий блог, использующий одну и ту же тему).

Исходный канал RSS2 не включает эти настраиваемые поля, кроме одного,будучи вложением, это определено в шаблоне RSS-канала по умолчанию (функция в WP rss_enclosure).

Это записано в оригинальном фиде, например:

<enclosure url="http://www.samplevideourl.flv" length="18554755" type="video/x-flv" />

Попытка добавить остальные настраиваемые поля, модифицирующие шаблон rss2-feed.php, чтобы они отображались в конце каждогосегмент в текущем канале RSS2, теперь они включены, например, как:

...
<ratings_average>0</ratings_average>
<views>5</views>
</item>

Однако, если я обновлю синдицированные посты или удалю посты и снова получу измененный фид с помощью feedwordpress, ни один из них не отобразитсяв синдицированных сообщениях.

Есть ли способ включить эти пользовательские поля, чтобы они распознавались feedwordpress?

В основном необходимо синдицировать тот же формат поста, что и оригинал, включая все его настраиваемые поля.

Большое спасибо

Карлос

1 Ответ

0 голосов
/ 24 июня 2013

Есть тема, которая покрывает это: https://wordpress.stackexchange.com/questions/3801/add-custom-fields-to-custom-post-type-rss

Я сконцентрировал ответы там, чтобы отразить последующие улучшения (спасибо MikeSchinkel, prettyboymp и Acts7).

Добавьте это в functions.php вашей темы:

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

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

Это добавит все имена и значения настраиваемых полей в основной канал сайта.

Обратите внимание, что для настраиваемых полей с более чем одним значением необходимо изменить, поскольку вышеприведенное будет работать только для полей с одним значением, а не для массивов.

Итак,

  1. На вашем Мастер-сайте (где вы синдицируете ОТ) вы добавляете вышеуказанную функцию.
  2. На подчиненном сайте (где вы синдицируете TO), если у вас установлен FeedWordPress, перейдите к «СИНДИКАЦИЯ» ->
  3. Нажмите на название канала RSS
  4. Перейти к пользовательским настройкам подачи и подключить куски
...