WordPress как на ладони
wordpress jino

wp_query проверка кастом поля

Привет, подскажите как на этапе еще до

 $query->have_posts() ) : $query->the_post(), где то здесь 
	$query = new WP_Query( array(
		'post_type' => 'post',
		'posts_per_page' => 1,
		'orderby' => 'id',
		) );

поставить еще проверку поста по кастом полю (чекбокс к примеру).

Итого, я создал через кастом филд, опцию показывать/ не показывать и надо чтобы оно проверяло если стоит "да" значит показать пост, просто если я ставлю вывод posts_per_page=1, чтобы он не выводил мне лишних постов, а проверку по кастом полю уже в цикле have_posts() и тд, он да его проверяет но если проверка провалена он ничего не выводит (так как пост 1 он уже вывел но он не проходит проверку кастом поля), а мне нужно чтобы выводил пост у которого стоит "Да" но проверку делал еще на этапе $query = new WP_Query, я думаю тогда он сразу будет выводить пост и последний и с активированным кастом полем. Можно конечно выводить по 10 постов и из них проверять по кастом полю, но это не правильно и лишний код будет скрыт.

Возможно можно решить вопрос по другому, отпишите кто в курсе. Спасибо

0
Гость 1.8 года назад
  • 1
    artikus73 cайт: wpruse.ru

    Примерно так

    function hide_posts($query) {
    	if (is_admin()) {
    		return;
    	}
    
    	if ( $query->is_main_query() && (is_home() || is_feed()) ) {
    
    			$query->set('post_type', 'post');
    			$query->set('meta_key', 'скрыть');
    			$query->set('meta_value', '1');
    			$query->set('meta_compare', '!=');
    		}
    }
    add_filter( 'pre_get_posts', 'hide_posts' );

    То есть просто проверяете цикл на наличие кастомного поля и если соответствует условию, значит пост выводится

    Правда такое срабатывает только на главной и архивах, если отдельная страница, то примерно тоже самое можно прописать в WP_Query

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