Я понимаю, что было несколько вопросов, которые связаны с решением, которое я ищу, но я считаю, что ищу что-то конкретное.
На самом деле это вопрос из двух частей:
1) Моя цель состоит в том, чтобы WordPress работал в сетевом (многосайтовом) режиме, и я пытаюсь найти способ по существу «группировать» определенные сайты вместе. Я знаю о плагине «Multi-Network», но я сомневаюсь, что это лучший подход для этого? Ключевым моментом здесь является разрешение конкретным пользователям добавлять/редактировать сайты в своей собственной подсети.
2) Это ключевой вопрос этого поста… Я хотел бы знать наилучший подход, который позволил бы мне по существу запрашивать сообщения из этой «подсети» сайтов. Итак, например, если в этой подсети есть 10 сайтов, и каждый из них создал сообщения в пользовательском типе сообщений, называемом «новости», тогда я хотел бы иметь возможность отображать, например, 10 последних опубликованных сообщений из этой коллекции 10 места.
ПРИМЕЧАНИЕ. Мне нужна возможность создавать несколько подсетей, что, в свою очередь, означает, что запрос последних опубликованных «новостей» может отображать только сообщения из тех, которые принадлежат правильной группе.
Наконец, я понимаю, что существуют решения для таких вещей, но я ищу лучший подход в обоих случаях, который требует НАИМЕНЬШЕГО количества загрузки/запросов к базе данных. Я также очень хотел бы сделать это с помощью кода в моем файле functions.php, а не устанавливать плагины, которые создают дополнительное раздувание.
Я очень открыт для любых предложений и ценю любой ответ.
Я знаю, вы сказали, что не хотите устанавливать плагин, но именно это вы и хотите сделать в данной ситуации. Размещение кода в
functions.php
файле вашей темы требует, чтобы вы либо использовали одну и ту же тему на всех сайтах в подсети, либо поддерживали несколько копий одного и того же файла. С другой стороны, вы можете создать простой подключаемый модуль для сети, чтобы инкапсулировать функциональность, затем активировать его в сети и сразу же получить функциональность, доступную только с одним файлом для обслуживания. На самом деле это создаст меньше раздувания, чем в зависимости от вашихfunctions.php
файлов.Здесь следует иметь в виду, что вам нужно либо просмотреть каждый сайт в сети, чтобы найти свои сообщения, либо выполнить собственный запрос. Я бы выбрал вторую процедуру, потому что, хотя она немного сложнее, это один запрос, а не отдельный запрос для каждого блога.
В основном… вам нужно будет сделать следующее:
wp_blogs
таблице. Просто выполните простойSELECT
запрос, чтобы загрузить массив, а затем вы сможете добавить каждый блог в свой основной запрос.JOIN
таблицы вместе и выполнять поиск на основеblog_id
(изwp_blogs
),post_id
(изwp_BLOG_posts
) и пользовательской таксономии.Как я уже сказал, это не простое решение (оператор SQL будет очень сложным, и у меня сейчас нет времени разбираться с ним), но это будет один оператор, выполняющий всю работу.
В качестве альтернативы…
При альтернативном методе вам придется запускать отдельный запрос для каждого блога в сети. Если в вашей сети 10-20 сайтов, это не проблема. Если ваша сеть состоит из 200-500 сайтов, ожидайте, что начнут возникать некоторые проблемы с производительностью.
Кроме того, вы должны кэшировать результаты вашего запроса, если это вообще возможно. Если он выполняется при загрузке нескольких страниц (например, для виджета боковой панели, доступного по сети), вам нужно запускать запрос только тогда, когда есть новые данные для получения. В противном случае подавайте кешированные результаты, чтобы не замедлять работу сети.
Спасибо за ваш ответ. Мне нравится ваша идея сделать это с помощью пользовательского SQL-запроса, поскольку я предполагаю, что это создаст меньшую нагрузку. Я надеюсь, что вы можете показать мне, какие плагины вы будете использовать для создания этих подсетей, с которыми могут быть связаны сайты, и, надеюсь, когда у вас будет время, SQL-запрос, который нужно будет использовать для автоматического запроса всех сообщений внутри этим сайтам назначена подсеть. Я очень ценю ваше время
Если можно обновите пожалуйста
о каких платных идет речь?
бесплатно: wordpress.org/extend/plugins/wp-multi-network
и платный: (мой) wpebooks.com/networks
@mirelle — но это явно не тот ответ, который я искал
У меня была похожая проблема. Мне нужно было получить список постов на всех сайтах сети, отсортированных по комментариям (чтобы показать самые популярные посты). Это функция, которую я использовал.
Суть в том, что сначала он получает список всех идентификаторов блогов в вашей сети. Затем он строит один большой запрос (используя UNION для объединения всех строк и не требуя уродливых JOIN), который получает результат, содержащий столбцы blog_id, ID и comment_count. Используя это, я затем использую get_blog_post() для получения подробной информации о каждом из сообщений.
Есть несколько строк отладки, которые вы можете использовать в разных точках, чтобы увидеть, что происходит.
}
Вам обязательно нужны многосайтовые сетевые плагины. На данный момент их три на выбор: два платных, один бесплатный.
Оттуда вы можете использовать что-то вроде плагина тегов для всего сайта, чтобы перетаскивать сообщения в основной блог в каждой сети.
Ни то, ни другое не может быть (или должно быть) выполнено из файла функций темы.
создайте собственную поисковую систему Google google.com/cse укажите все сайты, которые вы хотите найти
вставить его на свой сайт