Категории – Как Показать Сообщения Из Другой Установки Wordpress?

  • Автор темы Иванова Нина
  • Обновлено
  • 21, Oct 2024
  • #1

Я осмотрелся и не могу найти ответа на этот вопрос. Есть похожие вопросы/ответы, но ни один из тех, что я видел, не смог ответить на этот вопрос, поэтому заранее прошу прощения, если я пропустил этот вопрос, если он уже задавался.

Мой вопрос: можно ли извлекать сообщения из категории из другой установки Wordpress, используя другую базу данных на том же сервере?

Например.

Мой основной сайт — это медиа-сайт с различными публикациями. Второй сайт — это сайт/блог наших журналистов на том же сервере, с другой базой данных и другой установкой.

Мы хотели бы скопировать/вытащить его сообщения из «Примерной категории» и показать это сообщение на наших страницах WordPress. Используется та же тема, что и основная, и она не перенаправляется на вторую установку WordPress. Таким образом, сообщение практически автоматически копируется на главный сайт.

Наличие Wordpress MultiSite упрощает задачу или нам следует придерживаться одиночных установок? В будущем у нас будет более 10+ блогов WordPress.

Спасибо

#посты #категории #мультисайт

Иванова Нина


Рег
16 Sep, 2011

Тем
61

Постов
191

Баллов
526
  • 25, Oct 2024
  • #2

Немультисайтовая настройка:

Вам нужно создать еще один экземпляр Класс WPDB.

 
 
 
 $posts = FetchPostsClient\fetch_posts_as_xml( array(), true );

echo '<ol>';
array_walk(

$posts,

function( $post ) {

printf(

'<li><ul><li><a href="%s">%s</a></li><li>%s</li></ul></li>',

$post['permalink'],

$post['title'],

$post['content']

);

}
);
echo '</ol>';
 

На мультисайте WordPress:

Наличие Wordpress MultiSite упрощает задачу или нам следует

/** * Plugin Name: Fetch Posts Client * Plugin URI: * Description: Fetch posts in XML format from another blog * Version: 0.1 * Author: Ralf Albert * Author URI: http://yoda.neun12.de * License: GPLv3 */ namespace FetchPostsClient; // schedule event if ( ! wp_next_scheduled( 'fetch_posts' ) ) { wp_schedule_event( time(), 'daily', 'fetch_posts' ); } add_action( 'fetch_posts', __NAMESPACE__ . '\fetch_posts' ); /* * fetch the newest posts once a day */ function fetch_posts() { fetch_posts_as_xml( array( 'url' => 'http://wpse.tld/', 'cat' => 'uncategorized', 'return' => false ) ); } /* * fetching the posts */ function fetch_posts_as_xml( $args, $return = false ) { // for debugging //add_filter( 'wp_feed_cache_transient_lifetime' , function() { return 5; } ); // get stored posts from options $fetched_posts = get_option( 'fetched_posts' ); // if we just need the stored posts, return them if ( true == $return || ( isset( $args['return'] ) && true == $args['return'] ) ) return $fetched_posts; // prepare fetching the feed if ( ! function_exists( 'fetch_feed' ) ) include_once( ABSPATH . WPINC . '/feed.php' ); if ( ! isset( $args['url'] ) ) return; $url = $args['url']; /* * other options like author, tag, etc. possible */ // add category (if present) if ( isset( $args['cat'] ) ) $url = add_query_arg( array( 'cat' => $args['cat'] ), $url ); // need the feed (rss2) $url = add_query_arg( array( 'feed' => 'rss2' ), $url ); // for debugging //printf( '<p>Posts stored: %d<br>', sizeof( $fetched_posts ) ); // if no posts are stored, this is the first run, get all posts if( empty( $fetched_posts ) ) $url = add_query_arg( array( 'getall' => 1 ), $url ); // start fetching the feed $rss = fetch_feed( $url ); if ( isset( $rss->errors ) && ! empty( $rss->errors ) ) { // do some better error handling like logging the error var_dump( $rss->errors ); return; } if ( ! is_wp_error( $rss ) ) { $maxitems = $rss->get_item_quantity( -1 ); // get as much items as possible $rss_items = $rss->get_items( 0, $maxitems ); } // parsing the feed foreach ( $rss_items as $item ) { $fetched_posts[ $item->__toString() ] = array( 'title' => $item->get_title(), 'content' => $item->get_content(), 'permalink' => $item->get_permalink() ); } // for debugging //printf( 'New postcount: %d</p>', sizeof( $fetched_posts ) ); // store posts in options update_option( 'fetched_posts', $fetched_posts ); // return the posts return $fetched_posts; } придерживаться одиночных установок? getall Существует

функция доступна. Вам нужно будет после получения результатов.Обратите внимание, что вы можете кэшировать результаты, например, используя

API переходных процессов

, чтобы уменьшить нагрузку на сервер при будущих запросах.

 

KetsthakeWece47


Рег
17 Feb, 2007

Тем
78

Постов
178

Баллов
628
  • 25, Oct 2024
  • #3

Как упоминалось в ответе Р.Рикеша, многосторонняя установка упрощает задачу, поскольку это одна и та же база данных, и у вас есть к ней доступ. Если у вас возникли проблемы с подключением к сторонней базе данных (возможно, какие-то ограничения безопасности или база данных находится не на том же сервере), вам придется проделать немного больше работы. В этом случае вы можете получить фид, проанализировать и сохранить его. Получение фида немного проблематично, поскольку он обычно возвращает последние x постов (по умолчанию — 10 постов). Если вы хотите получить канал с помощью

getall

все pre_get_posts , check if a feed is requested and check if the query var /** * Plugin Name: Fetch Posts Server * Plugin URI: * Description: Allow to fetch all posts in XML format from another blog * Version: 0.1 * Author: Ralf Albert * Author URI: http://yoda.neun12.de * License: GPLv3 */ namespace FetchPostsServer; add_filter( 'query_vars', function( $qvars ) { array_push( $qvars, 'getall' ); return $qvars; } ); add_action( 'pre_get_posts', __NAMESPACE__ . '\get_all_posts_as_xml' ); function get_all_posts_as_xml( $query ) { if ( true === $query->is_feed ) { $getall = ( isset( $query->query['getall'] ) ) ? $query->query['getall'] : ''; if ( ! empty( $getall ) ) { // remove the feed posts limit add_filter( 'post_limits_request', function( $limits ) { return ''; } ); } } } сообщения, вам необходимо установить «серверный» плагин, который изменяет настройки. Чтобы не нарушать нормальное поведение ленты, я запускаю неограниченную ленту с параметром URL. Начнем с плагина «сервер».

Это легко. Сначала плагин добавляет запрос var. На следующем этапе плагин подключается к restore_current_blog() , we get установлен. Если он установлен, добавьте фильтр, чтобы удалить ограничение на количество сообщений. Если мы теперь запросим фид и передадим параметр URL

все

switch_to_blog()

постов вместо обычно ограниченного количества в 10 (или около того).

$newWPDB = new wpdb('Username','password','database','localhost'); $rows = $newWPDB->get_results("you-query-here");

Со стороны «клиента» работы немного больше. Нам нужен cron, чтобы проверять наличие новых сообщений, получать все сообщения при первом запуске и возвращать сохраненные сообщения по запросу. Я выбираю таблицу опций для хранения постов, думаю, это лучшее место.

Плагин ежедневно получает ленту, анализирует сообщения и сохраняет их в таблице параметров. Отобразить сохраненные сообщения очень просто:

Функция возвращает массив, в котором каждое сообщение представлено в виде массива (заголовок, постоянная ссылка и контент). Вы можете разместить код в шаблоне или виджете.

 

Jeesteer


Рег
09 May, 2014

Тем
77

Постов
188

Баллов
613
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно