我一直在玩一些代码片段,这些片段将元数据添加到管理员搜索中。
我找到的最好的片段是斯特凡诺(Stefano)关于这个问题的。
但是,当搜索非元术语时,它似乎有1个烦人的错误。
这是我本地开发安装的一些内容。我已经在屏幕上打印了两个MySQL查询。
我正在测试的单个CPT帖子的视图
这是按预期工作的代码,允许我从管理员搜索元数据
不幸的是,该代码在非元匹配中创建了重复项,在本例中为帖子标题
显示骗子的职位状态,职位类型和职位祖先的抓取
这是我正在运行的代码,与Stefano的代码基本相同,但是我尝试使查询正常工作。
/*
* Search custom fields from admin keyword searches
*/
function rel_search_join( $join ) {
global $pagenow, $wpdb;
if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type'] == 'listings' && $_GET['s'] != '') {
$join .= 'LEFT JOIN ' . $wpdb->postmeta . ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
}
echo '<br><strong>JOIN</strong>: ';
print_r ( $join );
echo '<br>';
return $join;
}
add_filter('posts_join', 'rel_search_join' );
function rel_search_where( $where ) {
global $pagenow, $wpdb;
if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type']=='listings' && $_GET['s'] != '' ) {
$where = preg_replace( "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
$where = str_replace( "OR wp_posts.post_status = 'pending'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'private'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'draft'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'future'", "", $where );
}
echo '<br><strong>WHERE</strong>: ';
print_r ( $where );
echo '<br>';
return $where;
}
add_filter( 'posts_where', 'rel_search_where' );
也许它也列出了修订?
—
passatgt
我以为我只看出版的,因为我删除了未决的,私有的,草稿的和未来的。没注意到版本类型。
—
jnthnclrk
嗯,似乎不是“修订”状态:codex.wordpress.org/Post_Status
—
jnthnclrk
尝试在其中一列中打印post_type或post_id,我认为修订版是post类型,因此,如果您可以看到修订版,则结果中也包含该类型。但是我还可以看到您只显示列表帖子类型的结果,所以我认为我错了。但是值得一试:)
—
passatgt
添加了具有职位状态,职位类型和职位祖先的新职位。
—
jnthnclrk