我正在使用Divi子主题函数中的pre\\u get\\u posts函数进行自定义帖子元搜索。php文件。问题是,最终查询不仅收集了我的自定义帖子字段(名为“autor”)的结果,还收集了其他字段,如“post\\u title”和“post\\u post”,我没有包括这些字段。
这是结果查询,其中以strong突出显示了棘手的一行:
选择SQL\\u CALC\\u FOUND\\u ROWS ebj\\u posts。ID来自ebj\\u posts内部连接ebj\\u term\\u relationships ON(ebj\\u posts.ID=ebj\\u term\\u relationships.object\\u ID)内部连接ebj\\u postmeta ON(ebj\\u posts.ID=ebj\\u postmeta.post\\u ID)内部连接ebj\\u postmeta AS mt1 ON(ebj\\u posts.ID=mt1.post\\u ID),其中1=1和(ebj\\u term\\u relationships.term\\u taxonomy\\u ID IN(456))AND (((ebj_posts.post_title LIKE \'%Abulafia%\') OR (ebj_posts.post_content LIKE \'%Abulafia%\'))) 和(ebj\\u postmeta.meta\\u key=\'autor\'和((mt1.meta\\u key=\'autor\'和CAST(mt1.meta\\u value为CHAR),如\'\'%Abulafia%\'))和ebj\\u posts。post\\u按ebj\\u posts键入(\'post\',\'page\',\'attachment\',\'project\',\'ref\\u bib\')和((ebj\\u posts.post\\u status=\'publish\'))组。ebj\\U Posteta的ID订单。meta\\u值ASC限制0,30“
正如您所看到的,在post_title 和post_content 字段,这不是预期的。
这一行以粗体显示,参数来自WP>WP includes>query行2196:
$search .= $wpdb->prepare( "{$searchand}(($wpdb->posts.post_title $like_op %s) $andor_op ($wpdb->posts.post_content $like_op %s))", $like, $like );
因为当我在wordpress核心代码中注释这些行时,问题就消失了。这是我在函数中的代码。php:
function filtra_inici( $query ){
global $wp;
if ( ( is_archive() ) && $query->is_main_query() && !is_admin() ) {
if ($query->is_search && isset($_GET[\'search-type\']) && $_GET[\'search-type\'] == \'autor\') {
$query->set( \'post_type\', \'ref_bib\');
$query->set( \'post_status\', \'publish\');
$query->set( \'orderby\', \'meta_value\');
$query->set( \'meta_key\', \'autor\' );
$query->set( \'order\', \'ASC\' );
$meta_query = array(\'relation\' => \'AND\');
array_push( $meta_query, array(
\'key\' => \'autor\',
\'value\' => $query->query_vars[\'s\'],
\'compare\' => \'LIKE\'
));
$query->set( \'meta_query\', $meta_query);
}
}// end is_archive
}
谢谢!