我在Wordpress中有一个搜索表单,它搜索自定义文章类型中的所有文章标题、内容和自定义字段。但它不会按作者搜索。我想如果搜索关键字匹配一个显示名称继续,并输出任何文章作者。
这是我当前的代码(它的显示名称部分显然是错误的,但说明了我想要实现的目标)。除了“按显示名获取帖子”部分外,其他部分都正常工作。感谢任何帮助或指导:)
// Code originally modified
// from http://www.deluxeblogtips.com/2012/04/search-all-custom-fields.html
global $wpdb;
// Gets the ?crs= search from the submitted form
$keyword = sanitize_text_field( $_GET['crs'] );
$keyword = '%' . like_escape( $keyword ) . '%';
// Search in all custom fields
$post_ids_meta = $wpdb->get_col( $wpdb->prepare( "
SELECT DISTINCT post_id FROM {$wpdb->postmeta}
WHERE meta_value LIKE '%s'
", $keyword ) );
// Search in post_title and post_content
$post_ids_post = $wpdb->get_col( $wpdb->prepare( "
SELECT DISTINCT ID FROM {$wpdb->posts}
WHERE post_title LIKE '%s'
OR post_content LIKE '%s'
", $keyword, $keyword ) );
// Search in User Table for Display Name
// This is where I'm not sure what how to get the posts by display_name
$post_ids_user = $wpdb->get_col( $wpdb->prepare( "
SELECT DISTINCT post_id FROM {$wpdb->users}
WHERE display_name LIKE '%s'
", $keyword ) );
$post_ids = array_merge( $post_ids_meta, $post_ids_post, $post_ids_user );
// Query arguments for WP_Query
$args = array(
'post_type' => 'courses',
'post_status' => 'publish',
'limit' => '',
'post__in' => $post_ids,
);
最佳答案
有一件事我想建议不要运行多个查询,加入您的表并在一个go中工作
从{$wpdb->users}中选择不同的post\u id
如果显示名称如'%s',这是错误的查询,则无法从users表中获取post id,posts和user的关系在posts表中维护,并且每个post在post_author
列中都包含用户id
试试这个
$post_ids = $wpdb->get_col( $wpdb->prepare( "
SELECT p.ID FROM $wpdb->posts p
INNER JOIN $wpdb->users u ON (p.`post_author` = u.`ID`)
LEFT JOIN $wpdb->postmeta m ON (p.`ID`= m.`post_id`)
WHERE ( u.display_name LIKE '%s' OR p.post_title LIKE '%s'
OR p.post_content LIKE '%s' OR m.meta_value LIKE '%s')
GROUP BY p.`ID`
", $keyword ) );
//print_r($post_ids); //you will get the post ids
$post_ids=array_values(array_unique($post_ids));