Условный оператор if ($post->ID == get_the_ID()) не работает

14 мар. 2011 г., 21:21:23
Просмотры: 16.6K
Голосов: 1

Следующий код должен работать так: если текущий тип записи (bbp_forum) отображается, то присвоить тегу <li> класс 'current'. Однако по какой-то причине класс 'current' (для выделения текущей ссылки bbp_forum) отображается во всех тегах <li>:

Скриншот проблемы с выделением текущего элемента

<body <?php body_class(); ?>>
<div id="wrapper" class="hfeed">
    <div id="header">
        <div id="masthead">
            <div id="branding" role="banner">
                <h1><a href="<?php echo home_url( '/' ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
            </div><!-- #branding -->
            <div id="access" role="navigation">
                <?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) ); ?>
            </div><!-- #access -->
        </div><!-- #masthead -->
        <ul id="forums">
          <?php global $post; $cat_posts = get_posts('post_type=bbp_forum');
          foreach($cat_posts as $post) : ?>
            <li <?php if($post->ID == get_the_ID()){ ?>class="current" <?php } ?>>
                <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Постоянная ссылка на %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
             </li>
          <?php endforeach; ?>
        </ul><!-- #access -->
    </div><!-- #header -->

    <div id="main">

Есть предложения по решению?

0
Все ответы на вопрос 1
0

Выражение всегда будет истинным. Взгляните на get_the_ID():

function get_the_ID() {
    global $post;
    return $post->ID;
}

Таким образом, ваш код по сути выполняется как:

if ( $post->ID == $post->ID ) // всегда true!

Вместо этого сохраните ID главной записи в переменную, а затем сравнивайте с ней.

<?php

global $post;

/**
 * @var int ID текущей записи.
 */
$the_post_ID = $post->ID;

/**
 * @var array Все записи типа bbp_forum.
 */
$cat_posts = get_posts('post_type=bbp_forum');

?>

<?php foreach ( $cat_posts as $post ) : ?>

    <li<?php if ( $post->ID == $the_post_ID ) echo ' class="current"'; ?>>
        <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Постоянная ссылка на %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
    </li>

<?php endforeach; ?>
14 мар. 2011 г. 21:30:00