Intereting Posts
Последнее сообщение, упорядоченное по дате публикации, используя WP_Query на главной странице Ошибка переадресации на целевой странице wordpress на localhost Использовать Cron для изменения сообщений через sql WP-администратор с нарушением права доступа с помощью dashicon Что мне нужно для тестирования одного скрипта в admin Импортируйте 10 000 пользователей в WordPress с определенным идентификатором для каждого пользователя Количество должностей за каждый год получить WP-API по идентификатору страницы Шаблоны страниц из плагина не работают после обновления WP до 4.7 или верхней версии Как создать профиль пользовательского интерфейса с дружественной постоянной ссылкой Преобразование первичных ключей из целых чисел автоинкремента в UUID wpdb подготовить: передать переменное количество полей в качестве второго аргумента Получить определенный цвет от цветовой схемы администратора Как изменить порядок отображения пользователей в админке? Как настроить результаты поиска в теме Bones?

новый WP_Query для получения максимальной стоимости метаданных не работает

Итак, я пытаюсь получить максимальную цену всех «свойств» (пользовательский тип сообщения).

$max_price_query = new WP_query(array( 'posts_per_page' => -1, 'post_status' => 'publish', 'post_type' => 'properties', 'nopaging' => true, 'orderby' => 'meta_value_num', 'meta_key' => '_price', 'order' => 'DESC', )); if ($max_price_query->have_posts()) { while ($max_price_query->have_posts()) : $max_price_query->the_post(); $pid = $post->ID; $price_max = get_post_meta($pid, '_price', true); echo '<pre>' . $pid . '</pre>'; endwhile; wp_reset_postdata(); } 

Первая проблема заключается в том, что они упорядочены по ID, а не по цене. Свойства называются Свойством 1, Свойством 2 и т. Д., Поэтому в этом случае упорядочен по идентификатору ==, упорядоченному по типу ==, упорядоченному по дате.

Вторая проблема заключается в том, что до того, как они будут упорядочены по идентификатору, они фактически упорядочены с помощью другого meta_value с именем _featured_prop (которое равно 0 или 1). Ну, это потому, что у меня также есть следующее:

  function set_query_parameters($query) { if( !is_admin() && is_main_query() && is_post_type_archive( 'properties' ) ) { $query->set('meta_key', '_featured_prop'); return $query; } add_action( 'pre_get_posts', 'set_query_parameters' ); 

Я не понимаю, почему этот pre_get_posts влияет на мой новый WP_Query, так как я указал 'is_main_query ()' в выражении if. Я думал, что это не повлияет на мой вторичный_query.

Когда я повторяю идентификаторы, я получаю: 26, 24, 20, 27, 25, 23, 22, 21, 19. Где 26, 24 и 20 имеют _featured_prop = 1.

Если это имеет значение, первый фрагмент кода вызывается в файле sidebar.php, который вызывается в archive-properties.php. В другом месте, в файле функций, я вызываю функцию во втором фрагменте кода (поскольку вы не можете сделать add_action из pre_get_posts после того, как pre_get_posts запущен, перед загрузкой страницы архива).

Может ли кто-нибудь мне помочь?

Solutions Collecting From Web of "новый WP_Query для получения максимальной стоимости метаданных не работает"

Как @Milo предложил, а также codex задокументировал это is_main_query Under_the_Hood

Эта функция является псевдонимом метода WP_Query::is_main_query() . В обратных WP_Query фильтра или действия, которые передаются объекту WP_Query , например pre_get_posts , для вызова этой функции является циклическим. Вместо этого прямо вызовите метод переданного объекта. Например, если ваш обратный вызов фильтра назначает переданный объект WP_Query $query , вы вызываете метод следующим образом: $query->is_main_query()

Вы должны изменить, если проводимость

 function set_query_parameters($query) { if( !is_admin() && $query->is_main_query() && is_post_type_archive( 'properties' ) ) { $query->set('meta_key', '_featured_prop'); } } add_action( 'pre_get_posts', 'set_query_parameters' ); 

Нет необходимости возвращать запрос. И я действительно удивляюсь, почему вы не получаете УВЕДОМЛЕНИЕ, потому что WordPress также запускает _doing_it_wrong() при использовании is_main_query() таким образом!