wordpress中的where子句

时间:2016-09-17 07:12:30

标签: php mysql wordpress

我想为我的wordpress生成一些随机链接,但我不想使用rand命令,因为它会导致mysql负载过重。以下链接工作正常,但当我使用orderby rand

$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只列出了表的最后5个链接,因为它是以命令为单位,以desc顺序显示5个链接。

但我希望生成低于当前ID的5个链接。

例如:如果用户在页面/ 10000上,生成的链接应为9999,9998,9997,9996,9995,如果用户在/ 100页面上生成链接将为99,98,97,96,95但是wordpress忽略where子句并生成相同的链接总是命令desc limit 5而不考虑where子句

1 个答案:

答案 0 :(得分:0)

您可以在wordpress查询中使用自定义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);

这将应用于get_posts()传递args的所有suppress_filters查询。

如果你有自定义post_type然后ckeck for post type,或者如果你有单页,那么只在该页面添加。