1

カテゴリページの投稿の横に関連する投稿をタグで表示したい。私が見つけることができるすべての関連する投稿コードは、ネストされたループで使用されますsingle.phpが、カテゴリページのループにある必要があります。

したがって、カテゴリ「猫」に移動すると、「投稿 1 タイトル」、カテゴリ「猫」、タグ「子猫」「関連投稿 1.1 タイトル」、タグ「子猫」「関連投稿 1.2 タイトル」、タグ「」が出力されます。子猫たち」


「投稿 2 タイトル」、カテゴリ「猫」、タグ「tomcats」 「関連投稿 2.1 タイトル」、タグ「tomcats」 「関連投稿 2.2 タイトル」、タグ「tomcats」


...

これは私が思いついたコードですが、壊れています。

/// 最初のクエリ $my_query = new WP_Query('cat=6');

// If first query have posts
if( $my_query->have_posts() ) :

    // While first query have posts
    while ($my_query->have_posts()) : $my_query->the_post(); 
    ?>

    <!-- start post -->


     <!-- End post div -->

        <?php
        // tags

            $tag_ids = array();
                            foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
                            $args=array(
                            'tag__in' => $tag_ids,
                            'post__not_in' => array($post->ID),
                            'posts_per_page'=>99,
                            'caller_get_posts'=>1
                            );
            // Second query
            $my_second_query = new WP_Query('$args');

            // If second query have posts
            if( $my_second_query->have_posts() ) :
            ?>

                <?php
                // While second query have posts
                while( $my_second_query->have_posts() ) : $my_second_query->the_post();


                    ?>
                    <!-- start post -->


     <!-- End post div -->


                    <?php
                // End second while have posts
                endwhile;
                ?>
    <?php
    // End first while have posts
    endwhile; 

// End if first query have posts
endif;
?>`

これは可能ですか?私は一生、例を見つけることができませんでした。よろしくお願いします

4

1 に答える 1

1

はい、可能です。コードで正しい方向に進んだようです。必要なことは、現在の投稿のタグを見て、それらを使用して他の投稿を見つけるカスタム クエリを作成することだけです。single.phpループ内にいる限り、それが使用されているか、他の場所で使用されているかは問題ではありません。functions.phpこれをファイルに追加します。

function echo_related_posts() {
    global $post;
    // Get the current post's tags
    $tags = wp_get_post_tags( $post->ID );
    $tagIDs = array();
    if ( $tags ) {
        // Fill an array with the current post's tag ids
        $tagcount = count( $tags );
        for ( $i = 0; $i < $tagcount; $i++ ) {
            $tagIDs[$i] = $tags[$i]->term_id;
        }
        // Query options, the magic is with 'tag__in'
        $args = array(
            'tag__in' => $tagIDs,
            'post__not_in' => array( $post->ID ),
            'showposts'=> 5
        );
        $my_query = new WP_Query( $args );
        // If we have related posts, show them
        if ( $my_query->have_posts() ) {
            $related = '';
            while ( $my_query->have_posts() ) {
                $my_query->the_post();
                $current = $my_query->current_post + 1;
                $related .= "Related post " . $current . ": ";
                $related .= "<a href='" . get_permalink() . "' >";
                $related .= get_the_title();
                $related .= "</a>";
                if ( ( $my_query->current_post + 1 ) != ( $my_query->post_count ) ) $related .= ", ";
            }
            echo $related;
        }
        else echo "No related posts";
    }
    else echo "No related posts";
    wp_reset_query();
}

明らかに、この関数を変更して、探している正確な結果を得ることができます。これは、最大 5 つの関連する投稿をエコーする例にすぎません。カスタム クエリの詳細については、http://codex.wordpress.org/Class_Reference/WP_Query を参照してください

echo_related_posts()その機能を配置すると、一般的なタグによって関連する投稿を出力する機能にアクセスできるようになりました。したがって、category.phpカテゴリページに使用されているテンプレートで、次のようなことを行うことができます (これは簡潔にするために過度に単純化されたループです。echo_related_posts()機能に注意してください)。

// Inside your existing loop
<?php while ( have_posts() ) : the_post(); ?>

    // Output the current post info here

    // Output the related posts
    <?php echo_related_posts(); ?>

<?php endwhile; ?>

関連する投稿が見つかったと仮定すると、次のように出力されます。

「関連記事1:タイトル1、関連記事2:タイトル2、関連記事3:タイトル3」

うまくいけば、そこからそれを取ることができます!

于 2012-09-06T05:11:08.437 に答える