Intereting Posts
Почему не работает wp_enqueue_script («jquery-masonry»)? Скрипт очереди после инициализации TinyMCE wp_logout_url перенаправляет на неверную страницу из-за разбивки на страницы Автоматизация абзацев на странице сообщений с уникальной привязной ссылкой Частота запланированных событий Как получить доступ к переменным плагина из шаблонов тем, не используя глобальные переменные? плагин для публикации сообщения в социальных сетях через администратора? Сжатие Google PageSpeed ​​Enable Compression не работает? Передача $ this-> get_field_name () в javascript Как уменьшить размер загрузки файла? Проводка до admin-ajax с передней стороны. Это перенаправление нормально? Плохо хранить много файлов в одной папке? Администратор может ввести JavaScript – потенциальный риск для безопасности? Как использовать API WP-REST для входа в систему пользователя и получения пользовательских данных для Android-приложения? Показывать только 2-й уровень навигации в зависимости от активной навигации

Внедрение пользовательского SQL-запроса в страницу / тему

Я написал собственный SQL-запрос для нашего сайта WordPress (довольно сложный и не достижимый со стандартным кодом WordPress), и я получил его для запуска через $pageposts = $wpdb->get_results($query, OBJECT); , он дает ожидаемые результаты. Теперь я хотел бы интегрировать этот запрос с помощью крючка (в идеале), так что мне не нужно обновлять страницу темы, чтобы мы могли обновлять тему. Я знаю, что hook pre_get_posts() позволяет вам настроить основной запрос, но из того, что я нашел, кажется, только разрешить вам настроить . Например $query->set( 'year', $today['year'] ); , Однако я хочу полностью заменить запрос.

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

Или мне нужно клонировать полную страницу из основной темы в дочернюю тему и использовать код следующим образом:

 <?php $pageposts = $wpdb->get_results($q, OBJECT); if ($pageposts): global $post; foreach ($pageposts as $post): setup_postdata($post); ?> 

Solutions Collecting From Web of "Внедрение пользовательского SQL-запроса в страницу / тему"

Крюки, которые вы ищете, можно найти в WordPress Codex WP_Query – Filters :

фильтры

  • posts_distinct – Изменяет предложение SQL 'DISTINCTROW' к запросу, возвращающему массив сообщений.
  • posts_groupby – изменяет предложение SQL 'GROUP BY' запроса, возвращающего массив сообщений.
  • posts_join – Изменяет предложение SQL 'JOIN' запроса, возвращающего массив сообщений.
  • post_limits – Изменяет предложение SQL «LIMIT» запроса, возвращающего массив сообщений.
  • posts_orderby – Изменяет предложение SQL «ORDER BY» запроса, возвращающего массив сообщений.
  • posts_where – Изменяет предложение SQL 'WHERE' запроса, возвращающего массив сообщений.
  • posts_join_paged – изменяет пейджинг SQL для сообщений, используя предложение JOIN запроса, возвращающего массив сообщений.
  • posts_where_paged – изменяет пейджинг SQL для сообщений, используя предложение WHERE, которое возвращает массив post.
  • posts_clauses – Изменяет все предложения SQL выше за один раз. Он дает вам множество элементов, которые легко изменить (доступно с версией 3.1 ).

Обратите внимание, что есть больше фильтров, чем упомянуто. Поскольку сложно get_posts(); внутри класса WP_Query (/wp-includes/query.php).

Во-первых, как отмечает примечание, есть больше фильтров, чем упомянуто, и, во-вторых, из указанных фильтров не все документировано. Вы можете многое сделать с теми, что включены в приведенный выше список, но, возможно, вам нужно будет взглянуть на исходный query.php самостоятельно, чтобы найти все возможности, которые у вас есть.

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