将帖子ID放在Wordpress循环之外

时间:2011-11-08 17:54:56

标签: wordpress

所以我有一段代码可以抓住类别及其重合的帖子,并将它们列在循环之外(下图)。我一直试图将帖子链接到#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标签,如下所示:

  • CATEGORY
    • 发布
  • CATEGORY
    • 发布
  • CATEGORY
    • 发布

1 个答案:

答案 0 :(得分:0)

不可否认,我并不完全理解“链接到#post- [ID]”的含义,但是问题标题是:

如果您在回显链接时使用get_permalink(),您将获得固定链接 - 这正是该功能所做的。

如果您想要返回后ID,请使用get_the_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>';