Добавляем на сайт свой фид (feed) для Яндекса
Если с сайта нужно выгрузить фид для Яндекса или для другого сервиса. То есть два способа. Первый это всевозможные плагины, но они почти все работаю с Woocommerce. Второй вариант, написать выгрузку вручную.
С такой проблемой я столкнулся на сайте застройщика, квартиры были выполнены кастомными записями. А нужно было несколько фидов в XML-формате для разных сервисов. И вот как я поступил, покажу на примере одного фида. Я же по подобию делал их несколько.
В файл functions.php вставляю следующий код:
// Yandex.Realty RSS
add_action('init', 'AddYandexRSS');
function AddYandexRSS(){
add_feed('yandex-realty.xml', 'ProceedYandexRealtyRSS');
}
function ProceedYandexRealtyRSS() {
get_template_part('rss-realty');
}
Описание: yandex-realty.xml это адрес фида https://название\_сайта/yandex-realty.xml/ и rss-realty — это название шаблона который нужно положить в папку с темой сайта (rss-realty.php).
В файле rss-realty.php вставляем цикл WP_Query который берет из кастомных записей, кастомные поля. Для примера приведу готовый код Яндекс.Недвижимость.
<?php header('Content-Type: '.feed_content_type('rss-http').'; charset='.get_option('blog_charset'), true);
echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?>';
?>
<realty-feed xmlns="http://webmaster.yandex.ru/schemas/feed/realty/2010-06">
<generation-date><?= date('c'); ?></generation-date>
<?php
// задаем нужные нам критерии выборки данных из БД
$args = array(
'post_type' => 'flat',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'flat_reservation',
'value' => 1,
'compare' => '!=',
),
),
);
$query = new WP_Query( $args );
// Цикл
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
?>
<offer internal-id="<? the_ID(); ?>">
<type>продажа</type>
<property-type>жилая</property-type>
<category>квартира</category>
<creation-date><?= date('c'); ?></creation-date>
<location>
<country>Россия</country>
<locality-name>Город</locality-name>
<address>Улица ул., д. номер</address>
<apartment><? echo get_field( 'flat_number', get_the_ID() ); ?></apartment>
</location>
<sales-agent>
<category>agency</category>
<phone>+71111111111</phone>
</sales-agent>
<price>
<value><? echo get_field( 'flat_price', get_the_ID() ); ?></value>
<currency>RUR</currency>
</price>
<area>
<value><? echo get_field( 'flat_area', get_the_ID() ); ?></value>
<unit>кв. м</unit>
</area>
<? if ( get_field( 'flat_rooms', get_the_ID() ) == 'студия' ) { ?>
<studio>да</studio>
<? }
else {
?>
<rooms><? echo preg_replace("/[^0-9]/", '', get_field( 'flat_rooms', get_the_ID() )); ?></rooms>
<rooms-offered><? echo preg_replace("/[^0-9]/", '', get_field( 'flat_rooms', get_the_ID() )); ?></rooms-offered>
<? } ?>
<floor><? echo get_field( 'flat_level', get_the_ID() ); ?></floor>
</offer>
<?php
}
} else {
// Постов не найдено
}
// Возвращаем оригинальные данные поста. Сбрасываем $post.
wp_reset_postdata();
?>
</realty-feed>