我想为我的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子句
答案 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,或者如果你有单页,那么只在该页面添加。