Intereting Posts
Каков рекомендуемый процесс организации совместной публикации? Что я могу включить в after_setup_theme? ошибка доступа к разрешениям Включение или не вложение в очередь Алгоритм проверки в поле checkout Как обслуживать файлы активов (js, css, images) на субдомене Как создать RSS-каналы для категорий в WordPress? Запрос сообщений из одной категории и исключение последней записи WP REST API. Легко ли переименовать часть wp-json по умолчанию? Verify Nonce возвращает false – Request Nonce возвращает правильное значение Зачем мне нужно регистрировать свой пользовательский тип сообщения во второй раз при покраске правил перезаписи? Как изменить местоположение уведомления администратора в html без использования Javascript? Результат поиска conditonal tag Использование переходных процессов для хранения captchas Невозможно добавить дополнительные элементы в основной навигатор (wp_nav_menu_items)

Закажите по метаоценке, сначала, затем бесплатно

query_posts($query_string . '&meta_value=pro&orderby=rand'); 

Я получаю про-список со случайным, но я хочу pro а также бесплатно, но сначала pro список, а затем free список meta_value .

Я также установил meta_value

  query_posts($query_string . '&orderby=meta_value_num'); 

Это не работает, а в строке запроса по умолчанию для cat . Он будет принимать date orderby с meta value = pro и free .

Какие-либо предложения?

Solutions Collecting From Web of "Закажите по метаоценке, сначала, затем бесплатно"

Прежде чем я уйду, просто одна заметка, НИКОГДА (мой акцент) не используют query_posts для создания пользовательских запросов

Примечание. Эта функция не предназначена для использования плагинами или темами. Как поясняется ниже, есть более эффективные, более эффективные варианты для изменения основного запроса. query_posts () является слишком упрощенным и проблематичным способом изменения основного запроса страницы путем замены его новым экземпляром запроса. Он неэффективен (повторно запускает SQL-запросы), и в некоторых случаях он будет неудачным (особенно часто при работе с разбивкой по страницам).

Скорее используйте WP_Query или get_posts для создания пользовательских запросов, но ТОЛЬКО, если вы не можете изменить основной запрос с помощью pre_get_posts . Для получения дополнительной информации ознакомьтесь с этой записью

Предполагая, что для вашей meta_key есть только два значения ( ОБРАТИТЕ ВНИМАНИЕ: для целей тестирования я использовал свой собственный мета-ключ, вы должны заменить его своим ), а именно pro и free , вы можете просто получать сообщения с этой конкретной meta_key , Тогда ваш запрос будет выглядеть примерно так:

 $args = [ 'meta_key' => 'packages', 'orderby' => 'rand', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args ); 

Если у вас есть больше значений, чем только эти два, вам нужно будет настроить ваш запрос, чтобы включить meta_value а затем использовать параметр meta_compare . Тогда ваш скорректированный запрос станет следующим:

 $args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ]; 

( PS! Прежде чем продолжить, вы должны заметить, что параметр orderby был изменен в версии 4.0, но в этом случае это не сработает.

Отлично, теперь у вас будет 5 сообщений, которые были получены случайным образом, у которых есть либо meta_value pro либо free

Теперь нам нужно отсортировать их. Лучшим решением является использование usort для сортировки возвращаемого массива сообщений в $the_query->posts соответствии со значением сообщений meta_value . Затем вам нужно будет $the_query->posts а затем сбросить их с помощью перенастроенного массива post.

Вот полный код:

 <?php $args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args ); $post_metas = $the_query->posts; usort( $post_metas, function( $a, $b ){ $a = get_post_meta( $a->ID , 'packages', true ) ; $b = get_post_meta( $b->ID, 'packages', true ) ; if ( $a == $b ) { return 0; } return ( $a > $b ) ? -1 : 1; } ); unset($the_query->posts); $the_query->posts = $post_metas; if ( $the_query->have_posts() ) { echo '<ul>'; while ( $the_query->have_posts() ) { $the_query->the_post(); echo '<li>' . get_post_meta( get_the_ID(), 'packages', true ). '</br>' . get_the_title() . '</li>'; } echo '</ul>'; } wp_reset_postdata(); ?> не <?php $args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args ); $post_metas = $the_query->posts; usort( $post_metas, function( $a, $b ){ $a = get_post_meta( $a->ID , 'packages', true ) ; $b = get_post_meta( $b->ID, 'packages', true ) ; if ( $a == $b ) { return 0; } return ( $a > $b ) ? -1 : 1; } ); unset($the_query->posts); $the_query->posts = $post_metas; if ( $the_query->have_posts() ) { echo '<ul>'; while ( $the_query->have_posts() ) { $the_query->the_post(); echo '<li>' . get_post_meta( get_the_ID(), 'packages', true ). '</br>' . get_the_title() . '</li>'; } echo '</ul>'; } wp_reset_postdata(); ?> 

Вам просто нужно будет отрегулировать переменные запроса в соответствии с вашими потребностями, а также отрегулировать цикл, чтобы отобразить то, что необходимо

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

Вам нужно запросить meta_key вместо meta_value :

  $query_string . '&meta_key=name_of_key_that_stores_free_or_pro&orderby=meta_value_num'