我理解compare在meta-query上下文中的使用,但我想知道是否可以通过WP_Query对wp_posts表中的另一列执行compare。我第一次写了这篇文章,效果很好:
$results = $wpdb->get_results(
$wpdb->prepare(
'SELECT id, post_title, post_name
FROM '.$wpdb->prefix.'posts
WHERE post_type = %s
AND post_status = %s
AND post_title REGEXP "%s"
ORDER BY post_date ASC',
'post',
'publish',
'Daily Task:'
)
); 但是在试图让WordPress来做这件事的时候,我想这样做:
$results = new WP_Query( array (
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'post_date',
'relation' => 'AND',
array ( 'compare' => 'LIKE%',
'post_title' => 'Daily Task: '
)
)
);我已经搜索了互联网和法典,我找到的都是meta_query的参考资料。这是因为compare、LIKE或REGEXP不适用于WP_Query吗?
谢谢!
发布于 2020-12-06 10:02:34
我想知道是否可以通过
compare对wp_posts表中的另一列执行WP_Query
在WP_Query中,compare不是直接/顶级参数的一部分,它仅与自定义字段(或post元)和日期查询(即meta_query和date_query中的子句)以及comment_count参数一起使用(默认情况下)。
因此,基本上,答案是“不”,或者不是默认的。
posts_where和WP_Query.中的其他钩子实现。
我第一次写这个,效果很好
是的,我想是的。
但是,WP_Query为修改SQL查询提供了各种挂钩,因此您可以使用posts_where和posts_clauses这样的钩子,而不是使用直接SQL查询(使用$wpdb)。
下面是一个基于new WP_Query()调用的示例,它查询标题以特定短语开头的帖子:
add_filter( 'posts_where', 'my_posts_where', 10, 2 );
function my_posts_where( $where, $query ) {
if ( $value = $query->get( 'custom_param' ) ) {
global $wpdb;
$like = $wpdb->esc_like( $value ) . '%';
$where .= " AND {$wpdb->posts}.post_title LIKE '$like'";
}
return $where;
}
// In your template or code:
$query = new WP_Query( array(
'custom_param' => 'Daily Task:',
// .. other args
) );但是,当然,您不必使用该代码,或者如果您认为直接SQL查询在您的情况下更好,那么只需使用它。
https://wordpress.stackexchange.com/questions/379380
复制相似问题