Intereting Posts
Удалить тег короткой ссылки с определенной страницы WP запрос исключает сообщение в течение последнего месяца / только шоу более 1 месяца Как отменить сценарий отмены регистрации и использовать локальные версии? Meta Box – Javascript Datatable Загружать изображения по порядку? Сделать Custom Post Behave Like Normal Post? подсветка синтаксиса и переписывание <? php Есть ли крючок между нажатием «Добавить новый» и экраном редактирования нового сообщения? Найти по post_meta, затем отсортировать по post_meta, затем отсортировать по дате (wp_posts) Программно вставить сообщение, как если бы это было сделано через панель администратора Word 403.php WordPress не найден, сервер по умолчанию использует собственную страницу 404 Apache Создание подменю с вкладками – от таксономического термина или подменю – с образцом контента Меню пользовательской панели не остается открытым для пользовательской таксономии Flash Intro встроен в html, как мне интегрироваться в качестве первой страницы Обновление серверов сразу в веб-кластере

новый 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() таким образом!