web-dev-qa-db-ja.com

カスタムループ、スティッキーポスト、およびページネーションの悪夢

私はすべて試しました。私はすべてを見ました。シングル。質問。ここでは、StackOverflowのWPヘルプフォーラムで、10ページの深さが表示され、文字通り、過去2日間、見つけたコードをすべて組み合わせて試してみましたが、うまくいきませんでした。確かにそれは不可能ではないでしょうか?目標はとても単純なようです!

目標:最初にすべてのスティッキー投稿を表示し、その後に通常の投稿を表示します - WITH PAGINATION。

例:1ページあたりの投稿数が10に設定され、15のスティッキー投稿と15の通常投稿がある場合、ページ1は10のスティッキ投稿、ページ2は5のスティッキ投稿、次に5のノーマル投稿、ページ3は10のノーマル投稿になります。日付順.

私は複数のループ、さまざまなクエリを試してみました、そしてCLOSEに来ましたが、これまでのところ葉巻はありません。これが私がこれまでに持っているものです:

<!-- THIS CODE QUERIES ALL POSTS AND RETURNS ONLY STICKY POSTS, DISPLAYED AT TOP OF THE PAGE -->
<?php
// show only ads within this specific category
$term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
//$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$sticky=get_option('sticky_posts');
$args=array(
    'post_type' => 'my_custom_post_type',
    'ad_cat' => $term->slug,
    'caller_get_posts' => 1,
    'post__in' => $sticky,
    'posts_per_page' => -1
    //'paged' => $paged
    );
query_posts($args);
?>
<?php get_template_part( 'loop', 'post_featured' ); ?>
<?php wp_reset_query(); ?>

<!-- THIS CODE QUERIES ALL POSTS AND RETURNS ONLY REGULAR POSTS, DISPLAYED BELOW THE STICKIES -->    
<?php
// show only ads within this specific category
$term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$sticky=get_option('sticky_posts');
$args=array(
    'post_type' => 'my_custom_post_type',
    'ad_cat' => $term->slug,
    'caller_get_posts' => 1,
    'post__not_in' => $sticky,
    'paged' => $paged,
    );
query_posts($args);
?>
<?php get_template_part( 'loop', 'post_normal' ); ?>
<?php wp_reset_query(); ?>

上記は全てのスティッキーポスト、そして(5)通常のポストを示しています。これは私が得た最も近いです、しかし#1、私は最初のページにすべての付箋の投稿を表示したくない、私はページ付け規則に固執したいです。 #2、すべてのスティッキー投稿がすべてのページ付きページに表示されます。だから私は50スティッキポストと50通常ポストを持っている場合、各ページは55ポストを示しています - 最初の50はスティッキーポストであり、最後の5は普通です、これは私の目標ではありません(上記の目標を参照)。

片方または両方のループを簡単に修正できますか?私は二重ループを使用するべきですか、またはこれをするための別の/より良いオプションがありますか?私はそれがうまくいく限り、提案を受け付けています。私は注意する必要があります:私はWP 3.2.1とWP-PageNaviから取られたスリム化された非プラグインページ付け関数を使用しています(完全なページ付け関数はここで見ることができます: http://paste2.org/p/1596821 )。

任意の助けは大歓迎です!

1
RodeoRamsey

@Chris_Oは正しいです...現在スティッキー投稿はカスタム投稿タイプではサポートされていないので、使用しているテーマと関係があるはずです。

今CPT問題を無視して...そしてそれがwordpressのスティッキーズがするのと同じように働くと仮定するとあなたが説明しているゴールはまさに 'sticky'ポストがwordpressで働くように設計されている方法です。通常の投稿ではページネーションに固執しています)ので、私があなたの問題を見分けることができるものからあなたが2つの別々のループを作成しようとしているという事実にあります。投稿を表示するには、1つのループだけを使用します。

1回だけループを実行してみましたか(つまり、2番目のクエリを削除し、最初のクエリを次のようなものに置き換えてスティッキが自動的に追加されるかどうかを確認します)。

$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;

$args=array(
  'post_type' => 'my_custom_post_type',
  'paged' => $paged,
  'posts_per_page' => 10
);
query_posts($args);

get_template_part( 'loop', 'post_normal' );
0
drebabels

私はあなたのテンプレートループを上記のコードと組み合わせるでしょう。

次に、1番目のループと2番目のループに条件を挿入します。

if($paged == 1) {
//Show Special Content for First

} else if($paged => 2) {
//Show Content for pages greater than 2

}

これはおそらくそのままではうまくいかないでしょうが、それはあなたが望む正しい設定を得るためにより多くの条件を使うことによって確かに正しい方向にあります。

したがって、私はWordpressの取引所にこのアカウントを持つ新しいユーザーです、私はコメントを投稿することはできませんし、「get_template_part( 'loop')」またはループテンプレートとコードを組み合わせることをお願いします。私はおそらくそこからもっと良い答えを出すことができました。

0
Anri