我了解compare
在以下情况下:meta-query
, 但我想知道是否有可能compare
在中的另一列上wp_posts
表viaWP_Query
. 我先写了这个,效果很好:
$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
?
谢谢
SO网友:Sally CJ
我想知道是否有可能compare
在中的另一列上wp_posts
表viaWP_Query
在里面WP_Query
, compare
不属于直接/顶层parameters, 并且它(默认情况下)仅用于自定义字段(或post meta)和日期查询(即meta_query
和date_query
), 以及comment_count
parameter.
所以基本上,答案是;否“;,或者默认情况下不是。
但可以使用posts_where
和其他挂钩WP_Query
.
这是我先写的,效果很好
是的,我想是的。
然而WP_Query
提供各种钩子来修改SQL查询,因此不必进行直接SQL查询(使用$wpdb
), 您可以使用如下挂钩posts_where
和posts_clauses
.
下面是一个基于new WP_Query()
call,查询标题以特定短语开头的帖子:
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查询在您的情况下更好,那么就直接使用它。