Intereting Posts
различия между поведением get_option vs get_site_option в многопользовательском режиме Использование имени темы в функциях is_search называется unsreclty Ошибка пользовательского почтового запроса Добавление аргумента в страницу результатов поиска Как получить последние комментарии, но не от администратора (или другой конкретной роли / возможности пользователя)? Как принудительно принять условия сайта при первом входе в систему? В jquery используйте переменную php для выполнения файла enqueued jquery Обновление метаданных CPT с использованием REST API Отображение пользовательской таксономии в боковой панели в двух столбцах Создание настраиваемого плагина типа сообщения – продолжайте получать белый экран смерти Каков правильный рабочий процесс для изменения дочерних тем? Попытка заменить старый PDF новым файлом, удаленным старым файлом мультимедиа! Почему WordPress не будет обновляться через VPN? Создание клиентской страницы

add_filter, где вопрос о статусе

Я пытаюсь получить начальные и конечные даты для сообщений, отфильтрованных, и я нашел документацию для фильтра «posts_where», я просто тестирую его до сих пор, но когда я добавляю фильтр, он, кажется, втягивает данные цикла для основная навигация (т. е. из wp_nav_menu ())

Я добавил:

<?php remove_filter('posts_where', 'uc_filter_where'); ?> <?php wp_nav_menu(array('sort_column' => 'menu_order', 'menu_class' => 'nav', 'theme_location' => 'primary-menu')); ?> 

в попытке очистить фильтр для сообщений, но нет такой удачи. Кто-нибудь объяснит мне, что я делаю неправильно.

Solutions Collecting From Web of "add_filter, где вопрос о статусе"

Поэтому прежде всего вы захотите убедиться, что вы хотите, и WHERE в. posts_where будет posts_where (почти) каждый запрос, чтобы вы были уверены, что добавляете его в нужное. Это можно сделать с использованием условных тегов .

Примечание: добавляется WHERE 1=1 потому что это означает, что добавлено действительное выражение WHERE и может быть расширено с posts_where фильтра posts_where (т. posts_where Просто добавив AND X=Y ). Infact WordPress жестко кодирует WHERE и добавляет в условные выражения – так что ему нужно что-то, чтобы быть уверенным, что SQL-запрос действителен

 add_filter('posts_where', 'wpse55985_posts_where',10,2); function wpse55985_posts_where($where, $query){ global $wpdb; //$query is a WP_Query object if( $query->is_main_query() && is_tax('my-tax') ){ //This is the main query for the 'my-tax' taxonomy page if( isset($_GET[POSTS_END_DATE_NAME]) && isset($_GET[POSTS_START_DATE_NAME]) ){ //Variables are set. $start = $_GET[POSTS_START_DATE_NAME]; $end = $_GET[POSTS_END_DATE_NAME]; //Append our additional 'WHERE' clause $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_date BETWEEN %s AND %s ", $start,$end ) ; } } return $where } 

объяснение

  1. Прежде всего используйте is_main_query() чтобы проверить, что это запрос, который является «основным» запросом для страницы. Условные все относятся к этому основному запросу. Поэтому я проверяю, что это основной запрос, и запрос для таксономии «мой налог» – в частности, просматривается страница таксономии «мой налог». Таким образом, вышеизложенное должно фильтровать сообщения на странице таксономии my-tax . См. is_tax() . В противном случае мы просто возвращаем предложение $where , не делая ничего.

  2. Убедитесь, что $_GET переменные $_GET вы используете. Вы действительно должны регистрировать пользовательские переменные запроса и использовать метод $query->get() чем напрямую обращаться с $_GET . Если они не установлены, мы не изменяем запрос.

  3. Используйте класс $wpdb чтобы получить имя $wpdb и безопасно подготовить запрос. См. Эту страницу Codex и последнюю часть этой статьи . Эта часть жизненно важна для защиты себя от SQL-инъекции.

Обратите внимание: я не тестировал это, и могут быть синтаксические ошибки.