Если с сайта нужно выгрузить фид для Яндекса или для другого сервиса. То есть два способа. Первый это всевозможные плагины, но они почти все работаю с Woocommerce. Второй вариант, написать выгрузку вручную.
С такой проблемой я столкнулся на сайте застройщика, квартиры были выполнены кастомными записями. А нужно было несколько фидов в XML-формате для разных сервисов. И вот как я поступил, покажу на примере одного фида. Я же по подобию делал их несколько.
В файл functions.php вставляю следующий код:
1 2 3 4 5 6 7 8 |
// 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 который берет из кастомных записей, кастомные поля. Для примера приведу готовый код Яндекс.Недвижимость.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<?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> |