WordPress липкие сообщения сначала, а затем в алфавитном порядке - PullRequest
1 голос
/ 02 мая 2019

У меня есть пользовательский тип записи с именем "products". Этот CPT имеет логическое поле с именем «featured».

В данный момент мой цикл товаров упорядочен по алфавиту:

$args = array(
    'post_type' => 'product',
    'post_status' => 'any',
    'orderby' => 'title',
    'order' => 'ASC'
);

if ( ! empty( get_queried_object() ) )
{
    $args['tax_query'] = array(
        array(
            'taxonomy' => 'product_categorie',
            'field'    => 'slug',
            'terms'    => get_queried_object()->slug
        ),
    );
}

Но как мне сделать так, чтобы сначала показывались все рекомендуемые продукты (с логическим значением = true), а затем все остальные продукты (все еще в алфавитном порядке)?

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

WP_Query позволяет использовать несколько ордеров с массивом:

$args = array(
    'post_type' => 'product',
    'post_status' => 'any',
    'meta_key' => 'featured',
    'orderby' => array('meta_value' => 'DESC', 'title' => 'ASC')
);
$query = new WP_Query( $args );

См .: Параметры Order & Orderby : Несколько пар ордеров / ордеров и orderby с meta_value и пользовательским типом записи

0 голосов
/ 02 мая 2019

Самый простой способ - использовать 2 аргумента и использовать их по отдельности. Этот пример должен работать в зависимости от мета-значения ключа «Featured» в базе данных:

$args = array(
        'post_type' => 'product',
        'post_status' => 'any',
        'orderby' => 'title',
        'order' => 'ASC'
);

    if ( ! empty( get_queried_object() ) ) {
        $args['tax_query'] = array(
            array(
                'taxonomy' => 'product_categorie',
                'field'    => 'slug',
                'terms'    => get_queried_object()->slug
            ),
        );
    }
// Featured products args
$args1 = $args;
$args1['meta_query'] = array(
    array(
        'key' => 'featured',
        'value'    => 1, // Make sure that's 1 is the repersentation of true in db
        'compare'    '='
    ),
);
// Not freatured product args
$args2 = $args;
$args2['meta_query'] = array(
    'relation' => 'OR',
    array(
        'key'     => 'featured',
        'value'   => 0,
        'compare' => '='
    ),
    array(
        'key' => 'featured',
        'compare'    'NOT EXISTS'
    ),
);
...