Intereting Posts
Можно ли встраивать контент в WordPress? admin_post в объектно-ориентированном плагине Как создать дополнительные полнотекстовые RSS-каналы Выпадающее меню: отображать условия от B только в том случае, если имеет отношение с выбранным членом A Ошибка WP Super Cache с Ubermenu Страницы WooCommerce доступны только для зарегистрированных пользователей Я случайно удалил пользователя admin, и весь их контент теперь ушел с сайта. Как обрабатывать фоновый размер: обложка в WordPress? Неопределенная ошибка переменной в опции темы после обновления темы Измените авторский пул от имени пользователя до псевдонима даты / времени и полей загрузки файлов (изображений) для настраиваемых полей (например, с большим количеством полей) Главная страница url permalink Я не могу получить свою пользовательскую область виджетов для показа на моем сайте WordPress Как получить страничный пул текущей страницы архива для пользовательской таксономии Показать комментарий WordPress славное имя

WP_Query «плохо реагирует» на пустые аргументы?

Я просматриваю несколько параметров в одном файле и загружаю сообщения через AJAX, поэтому tag_id переменные запроса атрибутов data : cat , tag_id , author , year и monthnum .

На основании того, что присутствует или нет (если вы находитесь на странице категории, переменная cat query будет некоторое число, но tag_id будет пустым, например). Теперь запрос выглядит так:

 $cat = ( isset( $_GET['cat'] ) && '' !== $_GET['cat'] ) ? sanitize_text_field( wp_unslash( $_GET['cat'] ) ) : ''; // Input var okay. $tag = ( isset( $_GET['tag'] ) && '' !== $_GET['tag'] ) ? sanitize_text_field( wp_unslash( $_GET['tag'] ) ) : ''; // Input var okay. $year = ( isset( $_GET['year'] ) && '' !== $_GET['year'] ) ? sanitize_text_field( wp_unslash( $_GET['year'] ) ) : ''; // Input var okay. $month = ( isset( $_GET['month'] ) && '' !== $_GET['month'] ) ? sanitize_text_field( wp_unslash( $_GET['month'] ) ) : ''; // Input var okay. $author = ( isset( $_GET['author'] ) && '' !== $_GET['author'] ) ? sanitize_text_field( wp_unslash( $_GET['author'] ) ) : ''; // Input var okay. $post__not_in = ( isset( $_GET['post__not_in'] ) && '' !== $_GET['post__not_in'] ) ? sanitize_text_field( wp_unslash( $_GET['post__not_in'] ) ) : ''; // Input var okay. $the_query = new WP_Query(array( 'cat' => $cat, 'tag_id' => $tag, 'author' => $author, 'date_query' => array( array( 'year' => $year, 'month' => $month, ), ), 'post_status' => 'publish', 'post__not_in' => json_decode( $post__not_in, true ), )); 

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

Теперь, что я не нашел, будет ли пустой аргумент запроса сделать запрос медленнее?

Должен ли я основывать свои аргументы запроса на основе какой переменной пуст? Это лучше сделать, чем просто положить все это в один массив? Что-то подсказывает мне, что это лучше, потому что меньше переменных запроса, и поэтому запрос более конкретный?

Также при загрузке сообщений с использованием AJAX следует добавить no_found_rows => 1 , потому что я не использую разбиение на страницы? Это должно сделать мой запрос еще быстрее из того, что я прочитал.

Любые советы приветствуются 🙂

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

Вот как я буду обрабатывать ваш код:

 $args = array(); // All your WP_Query args go here. // You don't need to pass 'post_status' => 'publish' because that's default // Replace all instances of [ isset && '' !== ] with !empty if ( !empty( $_GET['cat'] ) ) $args['cat'] = sanitize_text_field( wp_unslash( $_GET['cat'] ) ); if ( !empty( $_GET['tag'] ) ) $args['tag_id'] = sanitize_text_field( wp_unslash( $_GET['tag'] ) ); if ( !empty( $_GET['year'] ) || !empty( $_GET['month'] ) ) { $date_query = array(); if ( !empty( $_GET['year'] ) ) $date_query['year'] = sanitize_text_field( wp_unslash( $_GET['year'] ) ); if ( !empty( $_GET['month'] ) ) $date_query['month'] = sanitize_text_field( wp_unslash( $_GET['month'] ) ); $args['date_query'] = array( $date_query ); } if ( !empty( $_GET['post__not_in'] ) ) $args['post__not_in'] = sanitize_text_field( wp_unslash( $_GET['post__not_in'] ) ); $the_query = new WP_Query( $args ); 

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

Поскольку это относится к AJAX, я лично не использовал no_found_rows , поэтому я не могу говорить об этом. Протоколы AJAX, которые я написал, обычно сопряжены с входом, который имеет текущее смещение «страниц» отображаемых сообщений.