web-dev-qa-db-ja.com

AJAX ページ区切りオフセットは隣接するページで同じ投稿を返す

単純なAJAXページネーションがあり、pagenumとソート順の引数を使用して1つのWordpressページを呼び出す(理想的ではない)と、1回の呼び出しにつき4つのカスタム投稿が返されます。私がテストしている間私が見つけた問題は項目がdbのこのように発注されるならそれである:

item1: 4 votes
item2: 3 votes
item3: 3 votes
item4: 3 votes
----page2----
item5: 3 votes
item6: 2 votes
...

...カスタムフィールドに3票のあるアイテムのいずれかがページネーションの2ページ目の最初のアイテムとして表示される可能性があります。これはリストから項目の1つを効果的に消去します、そして私はget_postsを適切に問い合わせる方法を見つけることができないようです。

これは現在の外観です。

elseif($savjet_order == 'votes') :
$offset = (($savjet_per_page * $savjet_page) /* - $savjet_per_page*/ );
//$offset = $offset < 0 ? 0 :  $offset;
$args = array(
'numberposts'     => $savjet_per_page ,     
'offset' => $offset ,
'meta_key' => 'wpcf-glasova',
'orderby'         => 'meta_value_num post_date',
'order'           => 'DESC',   
//'paged' => $savjet_page , 
'post_type'       => 'savjet',    
'post_status'     => 'publish'
/*'suppress_filters' => true*/ ); 

$savjeti = get_posts($args);

... post_date(または偶数日付)をorderby句に追加しても何も変わらないようです( 'date'は、順序がDESCであってもリストを昇順にすることによってさらに悪化させるようです)。

1
steakoverflow

でそれを解決しました:

function myedit_posts_orderby($orderby_statement) {
    $orderby_statement = "wp_postmeta.meta_value+0 DESC, wp_posts.post_date DESC";
    return $orderby_statement;
}

add_filter('posts_orderby', 'myedit_posts_orderby');
WP_Query...

...何らかの理由で、WP_QueryはDESC命令を日付にのみ適用し、メタ値には適用しませんでした。

1
steakoverflow