web-dev-qa-db-ja.com

カテゴリ別に投稿を一覧表示

あるカテゴリから投稿のリストを取得し、そのカテゴリのすべての投稿のタイトルとパーマリンクをエコーし​​ますが、現在の投稿がそのリストにある場合はパーマリンクと投稿名を除外します。

それはループの後または内側でsingle.phpに表示されます。

それが可能であるかどうか誰でも知っています、もしそうならどのように?

前もって感謝します

<?php query_posts('category_name=MyCatName&showposts=-1'); ?>
<?php while (have_posts()) : the_post(); ?>

        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
          </a>
        <?php endwhile; ?>
3
user983248

最初に、カスタムループは二次ループ/クエリなので、query_posts()の代わりに WP_Query クラスを使うべきです。 なぜ読んでください

それが言われている、

/* main post's ID, the below line must be inside the main loop */
$exclude = get_the_ID();

/* alternatively to the above, this would work outside the main loop */
global $wp_query;
$exclude = $wp_query->post->ID;

/* secondary query using WP_Query */
$args = array(
    'category_name' => 'MyCatName', // note: this is the slug, not name!
    'posts_per_page' => -1 // note: showposts is deprecated!
);
$your_query = new WP_Query( $args );

/* loop */
echo '<ul>';
while( $your_query->have_posts() ) : $your_query->the_post();
    if( $exclude != get_the_ID() ) {
        echo '<li><a href="' . get_permalink() . '">' .
            get_the_title() . '</a></li>';
    }
endwhile;
echo '</ul>';

そうするだろう。

6
Johannes Pille

Johannesのコードに基づいていますが、引数post__not_inを使用しています。

/* Secondary query using WP_Query */
$wpse63027_posts = new WP_Query( array(
    'category_name'  => 'MyCatName',
    'posts_per_page' => -1,
    'post__not_in'   => array( get_queried_object_id() ), // Exclude current post ID (works outside the loop)
) );

その後、新しい投稿をループすることができます。

if ( $wpse63027_posts->have_posts() )
{
    while( $wpse63027_posts->have_posts() )
    {
        $wpse63027_posts->the_post();

        // Now do everything you want with the default API calls
        // Example
        the_title( '<h2>', '</h2>', true );
        the_content();
    }
}

WP_Query"投稿_ */Page_Parameters

2
Geert