Вытягивание сообщений с другого сайта WordPress

Я пытаюсь получить 2 последних сообщения с моего личного веб-сайта, используя приведенный ниже код с http://codex.wordpress.org/Function_Reference/fetch_feed#Usage

<h2><?php _e( 'Recent news from Some-Other Blog:', 'my-text-domain' ); ?></h2>

<?php // Get RSS Feed(s)
include_once( ABSPATH . WPINC . '/feed.php' );

// Get a SimplePie feed object from the specified feed source.
$rss = fetch_feed( 'THISISWHEREMYURLGOES/' );

$maxitems = 0;

if ( ! is_wp_error( $rss ) ) : // Checks that the object is created correctly

    // Figure out how many total items there are, but limit it to 5. 
    $maxitems = $rss->get_item_quantity( 2 ); 

    // Build an array of all the items, starting with element 0 (first element).
    $rss_items = $rss->get_items( 0, $maxitems );

endif;
?>

<ul>
<?php if ( $maxitems == 0 ) : ?>
    <li><?php _e( 'No items', 'my-text-domain' ); ?></li>
<?php else : ?>
    <?php // Loop through each feed item and display each item as a hyperlink. ?>
    <?php foreach ( $rss_items as $item ) : ?>
        <?php echo esc_html( $item->get_title() );  ?>
        <li>
            <a href="<?php echo esc_url( $item->get_permalink() ); ?>"
                title="<?php printf( __( 'Posted %s', 'my-text-domain' ), $item->get_date('j F Y | g:i a') ); ?>">
                <?php echo esc_html( $item->get_title() ); ?>                    
                <?php printf( __( 'Posted %s', 'my-text-domain' ), $item->get_date('j F Y | g:i a') ); ?>

            </a>
        </li>
    <?php endforeach; ?>
<?php endif; ?>

With this code, I can get the Posts URL, the title and the date posted, which is great!

Теперь попытка получить изображение - другая проблема. Я пытаюсь использовать:

<?php echo esc_html( $item->the_post_thumbnail() ); ?> 

Но я получаю сообщение об ошибке: Неустранимая ошибка: вызов неопределенного метода SimplePie_Item::the_post_thumbnail()

Итак, используя SimplePie, есть ли способ получить изображение сообщений?


ОСНОВНОЕ РЕДАКТИРОВАНИЕ:

Этот способ получения RSS-канала не очень хорош, он вызывает много проблем на всем сайте, поэтому, если бы кто-нибудь мог показать мне/направить меня к чему-то, где я могу получить 4 последних сообщения с другого сайта WordPress, это было бы классно!


person Community    schedule 23.06.2015    source источник
comment
У кого-нибудь есть идеи? или ДАЖЕ по-другому сделать это?   -  person    schedule 23.06.2015
comment
Хотелось бы, чтобы эта награда поторопилась, действительно нужно, чтобы это заработало :(   -  person    schedule 24.06.2015


Ответы (2)


Как вы уже поняли, фиды WordPress имеют некоторые ограничения. Поскольку вы попросили альтернативное решение, я определенно рекомендую использовать WP REST API.

Поскольку WP API еще не является частью WP Core, вам нужно сделать следующее:

  1. Перейдите на панель плагинов (на сайте, который вы пытаетесь извлечь из... вашего личного веб-сайта) и установите API WP REST (API WP).
  2. Активировать плагин
  3. Получить ваши сообщения так же просто, как зайти на: http://yoursite.com/wp-json/posts

Поскольку вам нужны только четыре сообщения, вы можете использовать фильтры:

http://yoursite.com/wp-json/posts?filter[posts_per_page]=4

Чтобы получить этот JSON в пригодном для использования состоянии в PHP:

// Get the JSON
$json = file_get_contents('http://yoursite.com/wp-json/posts?filter[posts_per_page]=4');
// Convert the JSON to an array of posts
$posts = json_decode($json);

Теперь вы можете переварить этот массив $posts, как хотите (перебирая его в цикле). Например:

foreach ($posts as $p) {
    echo '<p>Title: ' . $p->title . '</p>';
    echo '<p>Date:  ' . date('F jS', strtotime($p->date)) . '</p>';
    // Output the featured image (if there is one)
    echo $p->featured_image ? '<img src="' . $p->featured_image->guid . '">' : '';
}

Дополнительная информация в документах WP API.

person rnevius    schedule 25.06.2015
comment
Будет здорово, если это будет поддерживаться ядром — PS: мы также должны отметить, что плагин все еще развивается, и мы получили, например, это уведомление от команды по бета-версии 2: Только для разработки: из-за отсутствия прямой и обратной совместимости мы настоятельно рекомендуем вам не запускать бета-версию в рабочей среде.. Последняя версия плагина в репозитории на wordpress.org — 1.2.x. - person birgire; 25.06.2015
comment
@birgire, да, я терпеливо ждал слияния. До тех пор официальный плагин был великолепен! Спасибо за добавление этого важного примечания. - person rnevius; 25.06.2015
comment
Я выполнил следующие шаги, активировал плагин на сайте, с которого мне нужны сообщения, а затем на сайте, через который я хочу получить эти сообщения, использовал этот код: ‹?php // Получить JSON $json = file_get_contents('mywebsite.com/news/?filter[posts_per_page]=4') ; // Преобразование JSON в массив постов $posts = json_decode($json); ?› Но вообще ничего не отображается? - person ; 25.06.2015
comment
Ничего не должно отображаться. Как я уже упоминал, вам нужно будет пройтись по массиву. Вы сохранили сообщения в виде массива в переменной $posts. Если вы хотите увидеть все данные, содержащиеся в этом массиве, вы можете добавить var_dump($posts). - person rnevius; 25.06.2015
comment
Я просто получаю «NULL», когда пытаюсь использовать var_dump($posts). Предполагать, что это означает, что он на самом деле не получает никакой информации? - person ; 25.06.2015
comment
Да, теперь я понимаю, в чем проблема... Ваш URL-адрес неверен. Вы должны иметь его в виде /wp-json/posts/?filter[posts_per_page]=4. - person rnevius; 25.06.2015
comment
Не стесняйтесь присоединиться ко мне в чате, если вы хотите попытаться решить эту проблему с URL. - person rnevius; 25.06.2015
comment
Отлично, это показывает всю информацию, есть ли какая-то документация, которая четко объяснит, как получить 1) Название сообщения 2) Изображение 3) Дата и время сообщения - person ; 25.06.2015
comment
@rnevius, можем ли мы также получить сообщение из определенного типа сообщений ?? например, у меня есть событие типа сообщения, поэтому я могу получать сообщения только об этом. - person Xabby; 02.12.2016
comment
Я поддерживаю этот вопрос от @Xabby, есть ли способ отфильтровать пользовательский тип сообщения, категории или теги? - person Michael G; 27.02.2018

Если вы не хотите использовать WP REST API, попробуйте API разработчиков Wordpress.

Для этого вам нужно авторизовать плагин Wordpress Jetpack. А затем включите REST API.

<?php
$posts = json_decode(file_get_contents("https://public-api.wordpress.com/rest/v1.1/sites/{yoursite.com}/posts"));
//You can use the $posts variable afterwards
?>
person Manan    schedule 27.06.2015
comment
@rnevius Вы также можете использовать API с собственными блогами. Для этого вам необходимо авторизовать плагин Jetpack. - person Manan; 28.06.2015