WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Сортировка wp_query (пустое поле)

Хочу вывести все посты с пустым произвольным полем

Вот у меня есть произвольное поле status

У половины постов в этом поле указано значение - Выходит или Анонс

Подскажите, как вывести все посты у которых произвольное поле status пустое

Вот такой вариант не работает :

$args = array(
	'meta_key'     => 'status',
	'meta_value'   => 'Анонс', 
	'meta_compare' => '!='
);
0
lethalblo
20 дней назад 5
  • 1

    Это для выбора постов, у которых поле есть, но оно пустое

    $args = array(
    	'meta_query' => array(
    		array(
    			'key'     => 'status',
    			'value'   => '',
    			'compare' => '='    
    		)
    	)
    );
    $query = new WP_Query( $args );

    Это для выбора постов, у которых нет этого поля

    $args = array(
    	'meta_query' => array(
    		array(
    			'key'     => 'status',
    			'compare' => 'NOT EXISTS'   
    		)
    	)
    );
    $query = new WP_Query( $args );

    Это для выбора постов, у которых status не "Выходит" и не "Анонс" регистрозависимый

    $args = array(
    	'meta_query' => array(
    		'relation' => 'AND',
    		array(
    			'key'     => 'status',
    			'value'   => 'Выходит',
    			'compare' => '!=',
    			'type'    => 'BINARY'
    		),
    		array(
    			'key'     => 'status',
    			'value'   => 'Анонс',
    			'compare' => '!=',
    			'type'    => 'BINARY'
    		)
    	)
    );
    $query = new WP_Query( $args );
    lethalblo 20 дней назад

    Спасибо, но немного не получается сделать так как хотелось бы

    Первый вариант не работает
    Вот такие варианты работают:

    'key'     => 'status',
    'value'   => 'Выходит',     

    Либо чтобы вывести посты без статуса выходит

    'key'     => 'status',  
    'compare' => 'NOT EXISTS'   

    Но я хочу передавать значение, то есть к примеру сделать так, но параметр compare мешает...

    'key'     => 'status',  
    'value'   => $_GET['sort_stat'],            
    'compare' => 'NOT EXISTS'
    kaliyan 20 дней назад

    Попробуйте так. Или пустое, или не существует.

    $args = array(
    	'meta_query' => array(
    		'relation' => 'OR',
    		array(
    			'key'     => 'status',
    			'value'   => '',
    			'compare' => '='    
    		),
    		array(
    			'key'     => 'status',
    			'compare' => 'NOT EXISTS'   
    		)
    	)
    );
    $query = new WP_Query( $args );

    Не понял с передаваемым значением... Что будет в $_GET['sort_stat']?

    Пробуйте еще так: посты со всеми статусами, кроме 'Выходит' и 'Анонс'

    $args = array(
    	'meta_query' => array(
    		array(
    			'key'     => 'status',
    			'value'   => array('Выходит', 'Анонс'),
    			'compare' => 'NOT IN'    
    		)
    	)
    );
    $query = new WP_Query( $args );
    lethalblo 20 дней назад

    Пустое значение

    'value'   => '',

    Не выводит ничего, в этом и проблема

    А мне нужно вывести либо все записи, либо те у которых есть статус Выходит, ли те которые без статуса вовсе.

    Проблема в том, что я могу передавать разные значения через $_GET но только одному параметру

    kaliyan 20 дней назад

    Если

    'value'   => '',

    ничего не выводит, значит у вас нет постов, где это поле пустое.

    Пустое и не существует - 2 разные вещи.

    либо все записи

    // код без meta_query вообще

    либо те у которых есть статус Выходит

    'key'     => 'status',
    'value'   => 'Выходит',
    'compare' => '='  

    ли те которые без статуса вовсе

    'key'     => 'status',
    'compare' => 'NOT EXISTS'  

    В любом случае, изучите работу с мета-данными объекта WP_Query

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация