Сообщения не возвращаются в поисковом фильтре Wordpress

Я пишу запрос Wordpress для фильтрации результатов поиска.

Я хочу удалить результаты по шаблонам logged_in_mentor_only_template.php, logged_in_only_template.php (а также из двух запрещенных категорий).

Этот запрос работает, НО останавливает возврат любых сообщений. Очень странно, страницы возвращаются, а сообщения нет. (Я еще не добавил фильтрацию категорий, так как у меня нет сообщений для фильтрации!)

Я попытался добавить фильтр post_type с перечислением сообщений и страниц, но ничего не вышло.

Любая помощь приветствуется.

 query_posts(array_merge($wp_the_query->query, array(
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'logged_in_mentor_only_template.php',
            'compare' => '!='
        ),
        array(
            'key' => '_wp_page_template',
            'value' => 'logged_in_only_template.php',
            'compare' => '!='
        )
    )
)));

person rob_was_taken    schedule 20.11.2012    source источник
comment
Для ваших результатов поиска вы ищете только сообщения, которые будут возвращены? Или вы хотите также отображать Страницы, которые не имеют указанных выше мета-значений?   -  person David Gard    schedule 20.11.2012
comment
Привет, Дэвид, спасибо за ответ, я хочу вернуть сообщения и страницы.   -  person rob_was_taken    schedule 20.11.2012
comment
Хорошо, тогда мне не пришло в голову, что единственный способ сделать это в настоящее время - это пользовательский запрос выбора. Я подумаю и опубликую ответ, если мне придет в голову способ сделать это.   -  person David Gard    schedule 20.11.2012
comment
Предварительный совет: НИКОГДА не используйте query_posts используйте WP_Query дополнительная информация: wordpress.stackexchange.com/questions/1753/ & wordpress.stackexchange.com/questions/50761/   -  person janw    schedule 20.11.2012
comment
Спасибо, JanW. Извиняюсь за задержку, я отключился для перезагрузки. Я посмотрю, как это переделать.   -  person rob_was_taken    schedule 26.11.2012


Ответы (1)


Вы ищете _wp_page_template. В сообщениях не будет _wp_page_template.
Таким образом, будут получены только страницы. Потому что он вернет только сообщения/страницы, у которых есть набор _wp_page_template. Поэтому вам нужно проверить несуществующий мета-ключ.

В WP 3.5 будет добавлено значение compare "НЕ СУЩЕСТВУЕТ".

До версии 3.5 я бы предложил следующий обходной путь. Не добавляйте эти значения метазапроса. Но проверьте их в цикле:

while (the_posts()): the_post();
    if (get_post_meta(GET_THE_ID(), '_wp_page_template', true) == 'logged_in_mentor_only_template.php' || get_post_meta(GET_THE_ID(), '_wp_page_template', true) == 'logged_in_mentor_only_template.php')
        continue; // skipp the rest of this round
    //Do the rest of your loop
endwhile;

Второй вариант — получить все сообщения, которые имеют шаблоны.
Получить все идентификаторы из этого запроса.
Затем выполнить новый wp_query, исключив идентификаторы предыдущих полученный запрос.

лучший вариант
Эти обходные пути плохо влияют на производительность.
Лучшим вариантом было бы подождать несколько недель с выходом WP 3.5, он должен выйти где-то в декабре.

person janw    schedule 20.11.2012
comment
Итак, вы думаете, мне нужно добавить ключ, который применяется к сообщениям, чтобы включить их в цикл? Я не уверен, какая метаинформация доступна о сообщении? - person rob_was_taken; 20.11.2012
comment
Это не сработает, все равно не получится, потому что не пройдет проверку _wp_page_template :( - person janw; 20.11.2012
comment
Спасибо JanW - сейчас посмотрю на них. Очень ценю вашу помощь. - person rob_was_taken; 26.11.2012
comment
Спасибо JanW, просто перечитайте ответ. Можете ли вы дать мне понять, как я буду использовать значение «Не существует»? (когда он доступен). Может подожду 3.5? - person rob_was_taken; 26.11.2012
comment
вы должны использовать NOT EXISTS в дополнительном meta_query Это будет значение аргумента «сравнить». Вам все равно нужно будет дождаться версии 3.5, которая ожидается через несколько недель. PS вы можете поблагодарить с upvote ;) - person janw; 27.11.2012
comment
Спасибо за этот JanW, я скоро вернусь к нему. (к сожалению, у меня недостаточно представителей, чтобы проголосовать за этот ответ) - person rob_was_taken; 06.12.2012
comment
вам не нужно, вы должны принять это или, по крайней мере, принять его, когда выйдет 3.5;) - person janw; 06.12.2012
comment
3.5 со мной :) Еще раз спасибо! - person rob_was_taken; 17.12.2012
comment
Привет, Ян. Не был в сети на Рождество. С новым годом. У меня все получилось, спасибо... однако! Мне пришлось изменить то, как я использую это сейчас, поскольку я добавил метаполе к сообщениям и страницам вместо использования шаблона страницы. Теперь у меня есть метаполе, сохраняемое из области администрирования для каждого поста/страницы как smartPrivate с тремя (например) возможными значениями (1,2,3). Таким образом, я надеюсь отфильтровать результаты функции, используя pre_get_posts. Я хотел бы запустить его как функцию, чтобы избежать каких-либо изменений шаблона при создании дочерних тем. Должен ли я опубликовать это как новый вопрос? - person rob_was_taken; 07.01.2013
comment
Да, я предлагаю новый вопрос, вы можете сослаться на этот - person janw; 07.01.2013
comment
новый вопрос здесь, если вы вообще можете помочь: bit.ly/UK1bnz (с Новым годом и спасибо за вашу помощь до сих пор) - person rob_was_taken; 09.01.2013