1

Googleだけでなく、ここを含む他の場所でも検索しましたが、この問題に役立つものは何も見つかりません.

これが問題です。カテゴリではなくタグに基づいた関連記事スニペットがあり、WordPress テーマで使用しています。かなり長い間使用しており、非常にうまく機能しています。ここにあります:

        $tags = wp_get_post_tags($post->ID);
    $tagIDs = array();
    if ($tags) {
        $tagcount = count($tags);
        for ($i = 0; $i < $tagcount; $i++) {
            $tagIDs[$i] = $tags[$i]->term_id;
        }
    $args=array(
    'tag__in' => $tagIDs,
    'post__not_in' => array($post->ID),
    'showposts'=>mytheme_option( 'related_count' ),
    'ignore_sticky_posts'=>1
    );
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
        echo '<h4>'. __('Other Posts You May Be Interested In', "themename"). ':</h4><ul>';
        while ($my_query->have_posts()) : $my_query->the_post(); ?>

            <li class="imglink">

                <!-- post loop stuff goes here -->

            </li>

<?php endwhile;
echo '</ul>';
}
else {
echo '<h4>'. __('Other Posts You May Be Interested In', "themename"). ':</h4>
'. __('<p>There are no related posts at this time.</p>', "themename"). '';
}   
}
$post = $original_post;
wp_reset_query();

私が言ったように、それは本当にうまく機能します。投稿に同じタグが付いている場合、次のように表示されます。

あなたが興味を持っているかもしれない他の投稿: 同じタグの投稿が表示されます

しかし、ここに問題があります: 1 つの投稿にタグが付けられ、他の投稿に同じタグが付けられていない場合、次のように表示されます。

興味のあるその他の投稿: 現在、関連する投稿はありません。

投稿にタグが割り当てられていない場合、まったく何も表示されません。関連する投稿が表示されるはずの div は空ですが、関連する投稿はないと表示されます。

私は解決策を探し、これを修正するためにさまざまなことを試みましたが、頭を悩ませているようには見えません。誰かが私を助けてくれますか:

興味のあるその他の投稿: 現在、関連する投稿はありません。

投稿にタグがない場合に表示します。どんな助けでも大歓迎です。事前にどうもありがとうございました。

4

1 に答える 1

0

問題は、関数の上部に向かって条件付きで発生すると思います。

$tags = wp_get_post_tags($post->ID);

$tagIDs = array();
if ($tags) {
    # All of your code is in this conditional, 
    # if there are no tags, nothing will happen
}

投稿のタグが見つからない場合は、すべてのコードがスキップされ、何もレンダリングされません。コードの下部にあるelseステートメントは、現在の投稿のタグがある場合にのみ実行されますが、他の投稿にはそのタグが含まれていません。

要求に応じて例を使用して編集します-投稿なしのコンテンツをエコーアウトする他の2つの条件が必要です。1つはタグがない場合、もう1つはタグはあるが投稿が見つからなかった場合です。

$tags = wp_get_post_tags($post->ID);

$tagIDs = array();
if ( count( $tags ) > 0) {
    // setup $tagIDs and perform query...

    if( $my_query->have_posts() ) {
        // Echo out posts.
    } else {
        echo '<h4>'. __('Other Posts You May Be Interested In', "themename"). ':</h4>
        '. __('<p>There are no related posts at this time.</p>', "themename"). '';
    }
} else {
    echo '<h4>'. __('Other Posts You May Be Interested In', "themename"). ':</h4>
    '. __('<p>There are no related posts at this time.</p>', "themename"). '';
}

それはそれをする必要があります。ただし、コンテンツを関数にラップすることをお勧めします。次に、関数の最後に投稿なしのコンテンツをエコーアウトし、投稿が見つかった場合は「return」を実行できます。そうすれば、あなたは自分自身を繰り返すことはないでしょう。

于 2012-07-28T19:07:43.057 に答える