• Решено alexpts

    (@alexpts)


    После обновления появились проблемы с query_posts на нескольких блогах.

    На одном из блогов отвалился фильтр выборки по категории.

    Сейчас на своем блоге пишу перед циклом

    query_posts("post_type=page");
    или
    query_posts("post_type=blog");

    Но в цикле посты, а не нужные мне типы.

    У кого-то возникали проблемы после обновления с этим и в какую сторону вы копали?

    Если отключить все фильтры, которые влияют на запрос, то все отдельно вроде правильно работает. Но в сумме фильтры стали себя по другому вести, чем в ранних версиях.

    upd: is_home() в фильтре стала true почему-то возвращать если использовать ручной вызов query_posts. (или всегда так было?)

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Если отключить все фильтры, которые влияют на запрос, то все отдельно вроде правильно работает.

    Проверил на чистом дистрибутиве — тоже работает. Фильтры в студию 🙂

    Автор alexpts

    (@alexpts)

    Через фильтр определяю какие типы использовать на главной

    function my_type_posts($query ) {
    
    	if (is_home()) {
    		$query->set('post_type', array('post', 'theme', 'video'));
    		$query->set('cat', "-57");
    	}
    
    	if ($query->is_archive) {
    		$query->set('post_type', array('post', 'blog'));
    	}
    
    	return $query;
    }
    
    add_filter( 'pre_get_posts', 'my_type_posts');

    Функцией вывожу блок с похожими постами, если не удалить перед вызовом query_posts фильтр, то условие is_home() возвращает true, хотя открыта не главная страница, а страница записи. Фильтр перетирает условие.

    function getRandomPost(){
    	remove_filter( 'pre_get_posts', 'my_type_posts');
    	global $post_type;
    	query_posts("post_type=$post_type&orderby=rand&posts_per_page=4");
    
    	if (have_posts()) {
    		while (have_posts()) : the_post(); ?>
                     ...
    		endwhile;
    
    	} else  {
    		...
    	}
    
    	wp_reset_query();
    }

    На другом сайте найти не смог в чем дело было, там фильтром менял выборку для виджета «последнии записи». До обновления все работало как нужно, после обновления фильтр перестал видимо работать, т.к. из всех категорий посты стали отображаться.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Такая команда не работает в WordPress 3.1:

    $query->set('cat', "-57");

    Баг будет исправлен в WordPress 3.1.1. На текущий момент можно:

    Автор alexpts

    (@alexpts)

    $query->set(‘cat’, «-57»);

    Это объясняет почему на том блоге фильт по категории отвалился.

    А условие is_home() нормально, что возвращает true?
    Я думал, что это должно из URL запроса как-то определятся для всех новых объектов Query.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Проверил в 3.0.5 — is_home() также возвращает true.

    Автор alexpts

    (@alexpts)

    В моем представлении свойства нового объекта запроса должны заполнялись на основе данных о запросе (т.е. данных из URL). В ВП видимо другие представления реализованы.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Насколько я понимаю, они и определяются из URL. Возможно, я потерял нить рассуждений 🙂 Для какого адреса мы проверяем значение is_home()?

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «query_posts в ВП 3,1» закрыта для новых ответов.