2012-02-18 16 views
0

最初のループは、プライマリタグに基づいて現在の投稿に関連する投稿を取得します。下に表示される2番目のループは、セカンダリタグに基づいてポストを取得します。投稿が最初のループで表示されている場合は、2番目のループで検索されないように投稿が重複する投稿はありません。ifループ内にテキストを含むdivを非表示にするにはどうすればいいですか?

現在の投稿とタグが一致する投稿がない場合、何も表示されません。ここに私は問題がある。 <ul>の内側(または外側)に余分な<div id="relatedheader">要素が必要です(背景色のようにいくつかのスタイルが適用されている)。一致する投稿がない場合は表示されませんが、クエリで取得したすべての投稿のヘッダー "関連投稿"が返されます。私はそれが現時点で表示されている投稿ごとにエコーアウトされていることがわかります。コードを変更して投稿の上に一度だけ表示させる方法がわかりません。

<ul id="related">  
<?php 
$tags = wp_get_post_tags($post->ID); 
if ($tags) { 
    $first_tag = $tags[1]->term_id; 
    $args=array(
    'tag__in' => array($first_tag), 
    'post__not_in' => array($post->ID), 
    'showposts'=>3, //Display this number of related posts 
    'ignore_sticky_posts'=>1 
    ); 
    $my_query = new WP_Query($args); 
    if($my_query->have_posts()) { 
     while ($my_query->have_posts()) : $my_query->the_post(); if (!in_array($post->ID, $ids)) {; echo '<div id="relatedheader">Related posts</div>'; ?> 
     <li><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> 
     <?php } endwhile; 
    } 
} 
?></ul> 

答えて

0

プレゼンテーションからロジックを分離します。投稿や関連する投稿を集めたすべてのコードを上に移動するか、別のファイルや機能に移動し、配列にデータを格納します。次に、HTMLを出力する部分に到達すると、関連する投稿があるかどうかがすでに分かっているので、if条件を使用してヘッダーを出力するかどうかを決定できます。

+0

ありがとうございます。あなたのアドバイスは役に立ちます。すべてのhtmlを整理し、IDを格納している '$ idspost [] = $ post-> ID'に置き換えました。私は '<?php echo"

"; print_r($idspost); echo "
"でチェックしました。 ?> '正しいIDがページに書き込まれます。しかし、私は多くの時間を費やして、if条件に情報を渡す方法を理解しようとしましたが、私のスキルは非常に基本的です。どのように私はこれを達成することができます任意のアイデア? – sarytash

+0

:)元のコメントを乱して置き換えました – sarytash

+0

元のコードに変更があります: 'while($ my_query-> have_posts()):$ my_query-> the_post(); if(!in_array($ post-> ID、$ ids)); $ idspost [] = $ post-> ID; ?> <?php} $ ids [] = $ post-> ID;終わり。 } } ?> ' – sarytash

関連する問題