2016-09-17 18 views
1

私はワードプレスのためのランダムなリンクをほとんど生成しませんが、私はmysqlに重い負荷がかかるので、私はrandによる注文を使いたくありません。リンクの下に正常に動作しますが、私はorderbyのランドにwhere節はワードプレス

$wprpi_arg = array(
     'numberposts' => $wprpi_value['post'], 
     'post__not_in' => array(get_the_ID()), 
//  'where ID <' => get_the_ID(), 
     'orderby'  => 'rand', 
     'post_status' => 'publish', 
    ); 

を使用するとき、私は、この代わりに

$wprpi_arg = array(
     'numberposts' => $wprpi_value['post'], 
     'post__not_in' => array(get_the_ID()), 
     'where ID <' => get_the_ID(), 
     'orderby'  => 'ID', 
     'post_status' => 'publish', 
    ); 

を使用したい。しかし、これは動作しません。 WordPressはorderby idのように5つのリンクをdescの順序で表示するので、テーブルの最後の5つのリンクのみをリストしています。

しかし、私は現在の私のIDより5つ下のリンクを生成したいと思います。

たとえば、ユーザーがページ/ 10000にある場合、生成されるリンクは9999,9998,9997,9996,9995であり、ユーザーが/ 100ページ上にある場合、生成されるリンクは99,98,97,96,95 wordpressはwhere句を無視して常に同じリンクを生成しますorderby desc limit where where句を考慮せずに5を設定します

+0

あなたは '' 'のようにIDget_the_ID()、' ''がコーデックスのために行くとしません。 –

+0

@PrafullaKumarSahuはどのように説明することができますか?私はワードプレスを初めて使用しています – Steeve

+0

あなたの完全なスニペットを投稿できますか? IDを使用している場合は、投稿オブジェクトを取得してクエリを作成する理由は何ですか? –

答えて

0

以下のようにcustom where where条件を使用することができます。

注:使用get_the_ID()の代わりに、あなたのケースで215

//Add Filter 
add_filter('posts_where' , 'posts_where_for_ID'); 
function posts_where_for_ID($where) { 
    $where .= ' AND ID < '. 215; 
    return $where; 
} 

//Create args 
$args = array(
'numberposts'  => 5, //$wprpi_value['post'] 
'post__not_in'  => array(215), 
'orderby'   => 'ID', 
'order'    => 'DESC', 
'post_status'  => 'publish', 
'suppress_filters' => FALSE 
); 

//Get the posts 
$desc_posts = get_posts($args); 

//Store post ids 
$p_ids = array(); 
foreach($desc_posts as $posts_) { 
    $p_ids[] = $posts_->ID; 
} 

//Your ids are here 
var_dump($p_ids); 

この意志がsuppress_filtersは、引数で渡されるすべてのget_posts()クエリに適用されます。

カスタムpost_typeがある場合は、ポストタイプ用にckeckを使用するか、単一ページがある場合はそのページのみを追加します。