Пользовательский запрос Visual Composer — за исключением meta_key

У меня есть пользовательский запрос, который я хотел бы преобразовать в пользовательский запрос визуального композитора. По сути, я хотел бы исключить все сообщения из отображения в сетке сообщений, которые имеют мета_ключ: _is_featured_posts и его значение «да».

// WP_Query arguments
$args = array(
    'post_type'              => array( 'post' ),
    'post_status'            => array( 'publish' ),
    'nopaging'               => false,
    'posts_per_page'         => '12',
    'order'                  => 'DESC',
    'orderby'                => 'date',
    'meta_query'             => array(
        'relation' => 'AND',
        array(
            'key'     => '_is_ns_featured_post',
            'value'   => 'yes',
            'compare' => 'NOT EXISTS',
        ),
    ),
);

// The Query
$query = new WP_Query( $args );

Любая помощь будет оценена по достоинству.

Спасибо


person Hamza Aboufirass    schedule 23.01.2017    source источник
comment
Мне нужно получить что-то вроде следующего: post_type=package&package-tag=premium&post_status=publish. Например, в этом посте: design33.net/how-to-visual-composers-grid-custom-query   -  person Hamza Aboufirass    schedule 23.01.2017
comment
Возможный дубликат запроса WordPress Visual Composer для сетки сообщений   -  person Павел Иванов    schedule 24.01.2017


Ответы (2)


Существует альтернативное решение, оно не рекомендуется, но поскольку NOT EXISTS не работает, вы можете использовать следующий код. Я также проверяю решение, данное здесь, но оно тоже не работает.

//to hold the post id which has _is_ns_featured_post => 'yes'
$exclude_id = array();

$args_exclude = array(
    'post_type' => array('post'),
    'post_status' => array('publish'),
    'posts_per_page' => '-1',
    'meta_query' => array(
        array(
            'key' => '_is_ns_featured_post',
            'value' => 'yes',
        ),
    ),
);

$exclude_posts = new WP_Query($args_exclude);
if (!empty($exclude_posts->posts))
{
    foreach ($exclude_posts->posts as $post)
    {
        $exclude_id[] = $post->ID;
    }
}


$args = array(
    'post_type' => array('post'),
    'post_status' => array('publish'),
    'nopaging' => false,
    'posts_per_page' => '12',
    'order' => 'DESC',
    'orderby' => 'date',
    'post__not_in' => $exclude_id //exclude post_id which has _is_ns_featured_post => 'yes'
);

// The Query
$query = new WP_Query($args);
foreach ($query->posts as $post)
{
    print_r($post);
}

Надеюсь это поможет!

person Raunak Gupta    schedule 23.01.2017
comment
Спасибо за ваш вклад. Но в итоге мне нужно что-то вроде следующего: post_type=package&package-tag=premium&post_status=publish - person Hamza Aboufirass; 23.01.2017
comment
Как то, что описано в следующей ссылке: - person Hamza Aboufirass; 23.01.2017

См.: запрос wordpress визуального композитора для сетки сообщений

Попробуй это:

$args = array(
    'post_type'              => array( 'post' ),
    'post_status'            => array( 'publish' ),
    'nopaging'               => false,
    'posts_per_page'         => '12',
    'order'                  => 'DESC',
    'orderby'                => 'date',
    'meta_query'             => array(
        'relation' => 'AND',
        array(
            'key'     => '_is_ns_featured_post',
            'value'   => 'yes',
            'compare' => 'NOT EXISTS',
        ),
    ),
);

echo http_build_query($args);

// Результат:

post_type%5B0%5D=post&post_status%5B0%5D=publish&nopaging=0&posts_per_page=12&order=DESC&orderby=date&meta_query%5Brelation%5D=AND&meta_query%5B0%5D%5Bkey%5D=_is_ns_featured_post&meta_query%5B0%5D%5Bvalue%5D=yes&meta_query%5B0%5D%5Bcompare%5D=NOT+EXISTS

http://sandbox.onlinephpfunctions.com/code/5c2bc6ddd37a02fc8facf4f227176e262854b92e

Я бы рекомендовал избегать использования массива('post') в случае, если только один тип сообщения, поэтому просто используйте post_type=post&post_status=publish&nopaging=0&posts_per_page=12&order=DESC&orderby=date&meta_query[relation]=and&meta_query[0][key]=_is_ns_featured_post&meta_query[0][value]=yes&meta_query[0][compare]=NOT EXISTS

P.S. возможно %5B и %5D вам нужно будет преобразовать обратно в [ и ] через echo urldecode(http_build_query($args));

person Павел Иванов    schedule 24.01.2017