Получение идентификатора поста за пределами цикла Wordpress - PullRequest
0 голосов
/ 08 ноября 2011

Итак, у меня есть фрагмент кода, который захватывает категории и их совпадающие записи и выводит их за пределы цикла (ниже).Я пытался получить сообщение с ссылкой на # post- [ID] вместо постоянной ссылки - но я продолжаю терпеть неудачу.Кто-нибудь может помочь?

<ul id="sidebar">
<?php
    foreach( get_categories('orderby=ID&order=desc') as $cat ) :
    if( !$cat->parent ) {
    echo '<li class="title"><h2><a href="#">' . $cat->name . '</a></h2>';
    echo '<ul>';
    process_cat_tree( $cat->term_id );
            }
    endforeach;

    wp_reset_query(); //to reset all trouble done to the original query
    //
    function process_cat_tree( $cat) {
    $args = array('category__in' => array( $cat ), 'numberposts' => -1);
    $cat_posts = get_posts( $args );
    $id = $post->ID;

    global $post;
    if( $cat_posts ) :
    foreach( $cat_posts as $menuPost ) :
    echo '<li';
    if ( $menuPost->ID == $post->ID ) { echo ' class="active"'; }
    echo '>';
    echo '<a href="' . get_permalink( $menuPost->ID ) . '">' . $menuPost->post_title . '</a>';
    echo '</li>';
    endforeach;
    endif;

    echo '</ul></li>';
    }
?>

Приведенный выше код выводит теги UL / LI, например:

  • КАТЕГОРИЯ
    • Пост
    • Сообщение
    • Сообщение
  • КАТЕГОРИЯ
    • Сообщение
    • Сообщение
    • Сообщение
  • КАТЕГОРИЯ
    • Сообщение
    • Сообщение
    • Сообщение

1 Ответ

0 голосов
/ 08 ноября 2011

По общему признанию, я не совсем понимаю, что вы подразумеваете под "ссылкой на # post- [ID]", но переходя к заголовку вопроса:

Если вы используете get_permalink() при отображении ссылки,вы получите постоянную ссылку - это именно то, что делает эта функция.

Используйте взамен get_the_ID(), если вы хотите вернуть post-ID, или the_ID(), если вы хотите, чтобы он отображался (the_ID() - то же самое)как echo get_the_ID()).

Отредактировано отсюда:

Если вы не удовлетворены приведенным выше кодом, измените

 echo '<a href="' . get_permalink( $menuPost->ID ) . '">' . $menuPost->post_title . '</a>';

на

 echo '<a href="#post-' . $menuPost->ID . '">' . $menuPost->post_title . '</a>';

должен это сделать.

Однако я бы поступил так:

echo '<ul>';
$cat_args = array(
    'orderby' => 'name',
    'order' => 'ASC'
);
$categories = get_categories($cat_args);

foreach($categories as $category) { 
    echo '<li class="title"><h2><a href="#">' . $category->name . '</a></h2><ul>';
    // query posts of that category:
    $query_args = array(
        'cat' => $category->cat_ID,
        'posts_per_page' => -1
    );
    $your_query = new WP_Query( $query_args );
    // loop through them:
    while ( $your_query->have_posts() ) : $your_query->the_post();
        echo '<li><a href="#post-';
        the_ID();
        echo '">';
        the_title();
        echo '</a></li>';
    endwhile;
    echo '</ul></li>';
    // Reset Post Data
    wp_reset_postdata();
}
echo '</ul>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...