Intereting Posts
wp_logout Не регистрировать меня В чем разница между объектом виджета и экземпляром виджета? Планировщик бронирования отелей вы бы порекомендовали Как использовать is_feed () для таргетинга на фид категории? Сохранить настройки плагина редактора WYSIWYG, работает только после второго сохранения Недавние сообщения У виджета есть несколько старых сообщений наверху? Добавить окно обзора по функциям вверху или внизу содержимого как найти дублированные постоянные ссылки? Предварительный просмотр пути изображения в разделе администратора При активации дочерней темы какие базовые настройки необходимо сбросить, т.е. Пользовательские меню и т. Д.? Показывать дату только один раз для каждого набора сообщений, относящихся к этой дате Как грубый форекс знает, что пароль взломан для целевого имени пользователя? почему pre_get_posts не работает Локализованный формат даты для настраиваемого поля проблема с настройкой темы

Запрос сообщений с нескольких сайтов в сети?

Я понимаю, что было несколько вопросов, которые танцуют вокруг моего решения, но я считаю, что я ищу что-то конкретное.

На самом деле это вопрос двух частей:

1) Моя цель состоит в том, чтобы wordpress работал в режиме сети (многосайтовый), и я пытаюсь найти способ по существу «группировать» конкретные сайты вместе. Я знаю о плагине «Multi-Network», но я сомневаюсь, если это лучший подход для этого? Ключ здесь – позволить отдельным пользователям добавлять / редактировать сайты в пределах своей собственной подсетей.

2) Это ключевой вопрос этой публикации … Я хотел бы узнать лучший подход, который позволил бы мне существенно запросить сообщения из этой «подсетей» сайтов. Так, например, если в этой подсетей есть 10 сайтов, и каждый из них создал сообщения в пользовательском типе сообщений, называемом «новостями», тогда мне бы хотелось отобразить, например, 10 последних опубликованных сообщений из этой коллекции из 10 места.

ПРИМЕЧАНИЕ. Мне нужна возможность создания многопользовательских подсетей, что, в свою очередь, означает, что запрос последних опубликованных «новостей» может отображать сообщения только из тех, что принадлежат к правильной группе.

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

Я очень открыт для любых предложений и ценю любой ответ.

Я знаю, вы сказали, что не хотите устанавливать плагин, но это именно то, что вы хотите сделать в этой ситуации. Размещение кода в файле functions.php вашей темы требует, чтобы вы либо использовали одну и ту же тему на всех сайтах в подсети, либо поддерживали несколько копий одного и того же файла. С другой стороны, вы можете создать простой подключаемый модуль для сети, чтобы инкапсулировать функциональность, затем активировать ее в сети и сразу же иметь доступную функциональность только с одним поддерживаемым файлом. Это фактически создало бы меньше раздумий, чем в зависимости от ваших файлов functions.php .

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

В основном … вам нужно будет сделать следующее:

  1. Получите список всех идентификаторов блога в сети / подсетей. При использовании ванильной установки это можно найти в таблице wp_blogs . Просто сделайте простой запрос SELECT для загрузки массива, затем вы можете выполнить цикл, чтобы добавить каждый блог в свой основной запрос.
  2. Создайте цикл, который добавляет каждый блог к ​​большому запросу. Вам нужно будет объединять таблицы вместе и искать на основе blog_id (из wp_blogs ), post_id (из wp_BLOG_posts ) и пользовательскую таксономию.

Как я уже сказал, это не простое решение (инструкция SQL будет очень сложной, и у меня нет времени взломать ее на данный момент), но это будет одно заявление, которое сделает всю работу.

Альтернативно …

  1. Получите список идентификаторов блога и сохраните его в массиве.
  2. Итерируйте через массив, запрашивая каждый блог в сети и добавляя ваши совпадения (сообщения с определенным термином таксономии) в отдельный массив.

С помощью альтернативного метода вам придется запускать отдельный запрос для каждого блога в сети. Если ваша сеть составляет 10-20 сайтов, это не слишком большая проблема. Если ваша сеть насчитывает 200-500 сайтов, ожидается, что некоторые проблемы с производительностью начнут возникать.

Кроме того, вы должны кэшировать результаты своего запроса, если это вообще возможно. Если он запускается при загрузке нескольких страниц (т. Е. Для виджета боковой панели, разделяемого по сети), вы хотите выполнить запрос только тогда, когда появятся новые данные. В противном случае выполните кешированные результаты, чтобы не замедлить работу сети.

У меня была аналогичная проблема. Мне нужно было получить список сообщений по всем сетевым сайтам, отсортированным по комментариям (чтобы показать самые популярные сообщения). Это функция, которую я использовал.

Основой является то, что он сначала получает список всех идентификаторов блога в вашей сети. Затем он создает большой одиночный запрос (используя UNION для объединения всех строк и не требуя уродливых JOIN), который получает результат, содержащий столбцы blog_id, ID и comment_count. Используя это, я затем использую get_blog_post (), чтобы получить информацию о каждом из сообщений.

Есть несколько строк отладки, которые вы можете использовать в разных точках, чтобы увидеть, что происходит.

 function txx_top_posts_mu( $howMany = 10 ) { global $wpdb; global $table_prefix; // get an array of the table names that our posts will be in // we do this by first getting all of our blog ids and then forming the name of the // table and putting it into an array $rows = $wpdb->get_results( "SELECT blog_id from $wpdb->blogs WHERE public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0';" ); if ( $rows ) : $blogPostTableNames = array(); foreach ( $rows as $row ) : $blogPostTableNames[$row->blog_id] = $wpdb->get_blog_prefix( $row->blog_id ) . 'posts'; endforeach; //print_r($blogPostTableNames); // now we need to do a query to get all the posts from all our blogs // ordered by the number of comments and with limits applied if ( count( $blogPostTableNames ) > 0 ) : $query = ''; $i = 0; foreach ( $blogPostTableNames as $blogId => $tableName ) : if ( $i > 0 ) : $query.= ' UNION '; endif; $query.= " SELECT ID, comment_count, $blogId as `blog_id` FROM $tableName "; $i++; endforeach; $query.= " ORDER BY comment_count DESC LIMIT 0,$howMany;"; //echo $query; $rows = $wpdb->get_results( $query ); // now we need to get each of our posts into an array and return them if ( $rows ) : $posts = array(); foreach ( $rows as $row ) : $posts[] = get_blog_post( $row->blog_id, $row->ID ); endforeach; //print_r($posts); return $posts; endif; endif; endif; return false; 

}

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

Оттуда вы можете использовать что-то вроде плагина sitewide tags для вывода сообщения в основной блог в каждой сети.

Ни один из них не может быть (или должен быть) выполнен из файла функций темы.

создать пользовательскую поисковую систему google.com/cse, чтобы указать все сайты, которые вы хотите найти

встроить его на свой сайт