in_category вылазит на главной

В общем у меня такая структура на главной:
home.php
вывод страницы
<?php $my_query = new WP_Query(‘pagename=about’);
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate = $post->ID; ?>
блаблабла
закончили луп: <?php endwhile; ?><?php rewind_posts(); ?>

вывод через query_posts постов помеченных меткой
<?php query_posts(‘tag=рекомендуем’); ?>
луп
<?php endwhile; else: echo ‘ ‘; endif; ?>
<?php rewind_posts(); ?>

сайдбар
тут у меня условие:
<?php if ( in_category(‘1’) ) {
echo ‘тру ля ля’;
}
elseif ( in_category(‘3’) ) {
echo ‘оп ля ля’;
}
и еще неск. категорий
?>

заметила, в зависимости от того, какой категории принадлежат посты, выводимые через query_posts(‘tag=рекомендуем’);, такое и условие in_category() срабатывает, причем выводится текст для самой старшей (меньший ID) категории, пост которой присутствует в блоке, выведенном query_posts(‘tag=рекомендуем’);

т.е. если в блоке query_posts(‘tag=рекомендуем’); есть посты из категории ID=1, то на главной лезет текст из условия in_category(‘1’), а если есть посты из категории ID=3, при этом нет постов из категорий ID=1 и ID=2, то соотв. лезет текст из условия in_category(‘3’)

Вопрос:
зачем, почему и главное что делать, чтобы на главной в сайдбар не лез текст из условия с in_category()?

Соня, а какой смысл в проверке in_category для морды? Сделай в сайдбаре проверку еще и на is_home.

Соня, а какой смысл в проверке in_category для морды?

сайбрар подключается через require(TEMPLATEPATH.’/firstbar.php’) и выводится везде.
is_home почему-то не работает 🙁
вот я понять не могу — почему?

Неужто и его квери перебивают? Впрочем, что-то такое уже было. Сделай в самом начале, может даже в header.php, $is_home=is_home(), а потом проверяй на if ($is_home).

Вставила после <body>
<?php $is_home=is_home(); ?>

а в firstbar.php
<?php if ( $is_home() ) {
echo ‘бла’;
}
elseif ( in_category(‘1’) ) {
echo ‘тра та та’;
}
?>

Получается:
Fatal error: Call to undefined function: () in путь/firstbar.php on line 12

т.е. именно $is_home и есть фатал эррор 🙁

Вот же ж, как заколдованный…

Скобочки лишние убери
if ( $is_home ) {

Скобочки лишние убери  
if ( $is_home ) {

Теперь еррора нет, но все равно не работает 🙁
Шарясь по форуму майвордпресс еще нашла такое:
вместо (is_home()) писать ($_SERVER["REQUEST_URI"] == "/")
это заработало для главной!

Какой-то загадочный шаблон я состряпала 🙂

Теперь заметила, что и в Pages из in_category вылазит 🙂 Хорошо, что is_page хоть не отказался работать…

WordPress меняет тип страницы, после того, как использовался query_posts. Например если «до» этого страница может быть is_home, то после query_posts(cat= ) будет уже is_category (is_home будет уже false). Много потратил на это времени, единственное, что смог придумать, так это выполнять проверку до query_posts и заносить тип страницы в отдельную глобальную переменную, а в теле вывода уже сравнивать с ней. По другому никак…

по-моему у меня нечто похожее:
вывожу на главной:

<?php query_posts('page_id=2'); ?>

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    .....
    <?php endwhile; endif; ?>

и еще раз:

<?php query_posts('page_id=23'); ?>

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    ....
    <?php endwhile; endif; ?>

и у меня перестал работать код в сайтбаре:

 <?php if ( is_home() ) { ?>
  .....
  <?php } else { ?>
   .....
  <?php } ?>

не слушается, выводит не то…

не подскажите что делать?:)

После вызовов query_posts всякие is_home(), is_category() и т.п. могут отражать "состояние" не страницы, а последнего запроса.

Делать:

в header.php

global $is_home;
$is_home = is_home();

в сайдбaре

global $is_home;
if  ($is_home) {
 ....
}

Ю.Б.!!! огромное спасибо! не перестаю восхищаться Вами!!!!
🙂

Anonymous
Отправить
Ответ на: