2016-08-13 10 views
14

から$スティッキーポストを重複除外します。重複しながらWordpressのは、<a href="https://codex.wordpress.org/Sticky_Posts">sticky posts</a>機能はポストのフロントページの最上部に配置するパネルを公開ポストに<em>スティッキー</em>としてチェックポストを許可するのWordpressのでループ

<?php if (have_posts()) : ?> 
    <?php $post = $posts[0]; $c=0;?> 
    <?php while (have_posts()) : the_post(); ?> 

    <?php $c++; 
     if(is_home() && !$paged && $c == 1) :?> 
     <!--First sticky post content --> 

    <?php elseif(is_home() && !$paged && $c == 2) :?> 
     <!--Second sticky post content --> 

    <?php elseif(is_home() && !$paged && $c == 3) :?> 
     <!--Third sticky post content --> 

    <?php else:?> 
     <!-- Standard post content --> 

    <?php endif;?> 
    <?php endwhile; ?> 
    <!-- End of the main loop --> 
     //pagination 

    <?php else : ?> 
     <?php _e('Sorry, no posts matched your criteria.'); ?> 

    <?php endif; ?> 

結果は、私がカスタマイズされたスタイルで(スティッキーとしてチェック)最初の3つのポストを得ることである:私はまた、次のようThe Loopデフォルトのコーディングをカスタマイズすることにより、ループ内の通常のものとは異なるスティッキーポストのスタイルを意図していました標準投稿の出力を取り除くことができませんでした。

<?php else : ?><?php elseif(!is_sticky()) : ?>に置き換えようとしましたが、表示されたページが「ページング」されているか、または現在のページ番号が1より大きいページがスティッキーポストによって差し引かれています。

スティッキーポストを複製しないようにするには、何か助けてください。

+0

からのみスティッキー投稿を削除するには、このコードを使うのか?可能であればコード全体を共有してください... – shramee

+0

ちょっと@Ehab、ループが1つしかないとしたら、私の答えは以下の通りです – shramee

答えて

4

私はWP_Queryのドキュメントを読むことをお勧めします:
https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

あなたは新しいを作成(または既存の変更)のクエリと粘着性のものなしに投稿を取得することができます。

はスティッキー投稿

は、クエリからすべてのスティッキ投稿を除外し表示しない:

$query = new WP_Query(array('post__not_in' => get_option('sticky_posts')));

私はあなたが2つの連続でクエリを作成することを示唆しています。

最初にスティッキーポストをフェッチし、もう1つは他のすべてのポストをフェッチします(スティッキーは上記のように除外されます)。

+0

私はクエリ引数に慣れています。そうすれば、最初のページhttps://codex.wordpress.org/Sticky_Postsにしか必要でない間にループ全体からスティッキーな投稿が完全に削除されます –

+1

その場合は、最初にスティッキーポストを取得する2つのループを使用することをお勧めします。他のすべての投稿を取得するために2番目の(粘着性のものは除外されます)。 –

1

あなたはそのようにホームページの記事や他の記事を分離することができます:

<?php if (have_posts()) : ?> 

<!-- if home page --> 
<?php if(is_home() && !$paged) :?> 

    <!-- First page loop --> 
    <?php $post = $posts[0]; $c=0;?> 
    <?php while (have_posts()) : the_post(); ?> 

    <?php $c++; 
    if($c == 1) { ?> 
    <!--First sticky post content --> 
    <?php } ?> 

    <?php if($c == 2) { ?> 
    <!--Second sticky post content --> 
    <?php } ?> 

    <?php if($c == 3) { ?> 
    <!--Third sticky post content --> 
    <?php } ?> 

    <?php endwhile; ?> 
    <!-- End of first page loop --> 

<!-- else if not home page --> 
<?php else:?> 

    <!-- exclude stuicky posts, then run the standard loop --> 
    <?php $query = new WP_Query(array('post__not_in' => get_option('sticky_posts'))); 

    <?php while (have_posts()) : the_post(); ?> 
    <!-- Standard post content --> 

    <?php endwhile; ?> 

<?php endif;?> 
<!-- end if home page/else --> 
    //pagination 

<!-- else if have no posts --> 
<?php else : ?> 
    <?php _e('Sorry, no posts matched your criteria.'); ?> 

<?php endif; ?> 
<!-- end if have posts/else --> 
1

<?php 
    $sticky_query = new WP_Query(array('post__in' => get_option('sticky_posts'))); 
    while ($sticky_query->have_posts()) : $sticky_query->the_post(); 
?> 

は粘着性ではありません

<?php 
    $non_sticky_query = new WP_Query(array('post__not_in' => get_option('sticky_posts'))); 
    while ($non_sticky_query->have_posts()) : $non_sticky_query->the_post(); 
?> 
を行うの記事を扱うために行うスティッキーポストを処理するには


PS - is_sticky()は機能しませんここで私はこのコードがあなたのホームページで動いていると推測しています。 is_sticky()は、投稿ページ以外のページで必要に応じてpost_idが必要になります。

あなたの現在のコードのループ内にis_sticky(get_the_ID())のようなことをすることができます。else

1

単にcontinueポストは粘着性のある場合

が他の部分の上に

<?php if (is_sticky()) continue;?> 

を入れて...
あなたのコードは、この

<?php if (have_posts()) : ?> 
<?php $post = $posts[0]; $c=0;?> 
<?php while (have_posts()) : the_post(); ?> 

<?php $c++; 
    if(is_home() && !$paged && $c == 1) :?> 
    <!--First sticky post content --> 

<?php elseif(is_home() && !$paged && $c == 2) :?> 
    <!--Second sticky post content --> 

<?php elseif(is_home() && !$paged && $c == 3) :?> 
    <!--Third sticky post content --> 

<?php else:?> 
    <?php if (is_sticky()) continue;?> 
    <!-- Standard post content --> 

<?php endif;?> 
<?php endwhile; ?> 
<!-- End of the main loop --> 
    //pagination 

<?php else : ?> 
    <?php _e('Sorry, no posts matched your criteria.'); ?> 

<?php endif; ?> 
1

が好きなのになりますこのコードを使用してスティッキーポストのみを表示できます

あなたは2つのループまたはちょうど1を持っていますか、ループ

<?php 
$args = array(
'posts_per_page' => 4, 
'post__not_in' => get_option('sticky_posts') //that will remove only sticky posts 
); 
$my_query = new WP_Query($args); 
while($my_query->have_posts()) : $my_query->the_post(); 
?> 
    <!-- normal posts content without sticky --> 

<?php endwhile; ?> 
<?php wp_reset_postdata(); ?> 
関連する問題