首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过MySQL查询按Wordpress获取用户显示名称

通过MySQL查询按Wordpress获取用户显示名称
EN

Stack Overflow用户
提问于 2013-09-23 18:26:33
回答 1查看 3K关注 0票数 2

我在Wordpress中有一个搜索表单,它搜索自定义post类型中的所有帖子标题、内容和自定义字段。但是它不会被作者搜索。我想如果搜索关键字匹配一个显示名称继续前进,并输出任何文章的作者。

下面是我的当前代码(它的display_name部分显然是错误的,但说明了我想要实现的目标)。除了display_name部分的get帖子之外,一切都正常工作。如有任何帮助或指导,欢迎:)

代码语言:javascript
运行
复制
// 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,
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-23 19:06:39

有一件事我想建议,不要运行多个查询,加入您的表,然后一步一步地工作。

从{$wpdb-> post_id }中选择display_name '%s‘--这是错误的查询您无法从user表中获得post id,post表中维护了post和user之间的关系,并且每个post都包含post_author列中的用户id

试试这个

代码语言:javascript
运行
复制
$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));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18966220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档