我开始使用cca 5000用户开发Worpdress门户。每个用户都将拥有cca 20元值(如街道,城市等)。
我需要对用户元数据进行分页/排序的一些报告,我很好奇最有效的方法是什么。
Wordpress通常将每个元存储在usermeta表中,因此我可以:
1)join the users and usermeta table multiple times
,获取所有元数据,并直接在MYSQL查询中排序
2)使用get_users(array('fields' => 'all_with_meta'));
和自定义排序功能,如http://www.stormconsultancy.co.uk/blog/development/code-snippets/sort-a-list-of-wordpress-users-by-a-custom-meta-field/
3)创建custom meta table
来存储值 - 这里描述http://sltaylor.co.uk/blog/custom-meta-tables-wordpress/
最好的方法是什么?或者还有其他方法可以在Wordpress中使用用户及其元数据吗?
答案 0 :(得分:0)
我昨天有一个similar question用于搜索特定postmeta字段以查找关键字的系统。
如果任何字段包含搜索字词,则上述链接上的答案将返回帖子。
但是,下面的改进版本会返回找到了多少关键字(0到#关键字之间,而不是每个字段中找到的关键字的实际数量)。
FYI Post meta和用户元表基本相同,这应该对你有用。您可以使用wordpress查询对象进行设置,但我的代码是自定义SQL,因为它是一个独立的脚本 - 在WordPress之外。
SELECT *
FROM (
SELECT
post.ID as post_id,
( IF ( (
post.post_title LIKE '%c++%'
OR post.post_content LIKE '%c++%'
OR meta_field_a.meta_value LIKE '%c++%'
OR meta_field_b.meta_value LIKE '%c++%'
), 1, 0 )
+ IF ( (
post.post_title LIKE '%java%'
OR post.post_content LIKE '%java%'
OR meta_field_a.meta_value LIKE '%java%'
OR meta_field_b.meta_value LIKE '%java%'
), 1, 0 ) ) AS occurrences
FROM wp_posts post
JOIN wp_postmeta meta_field_a ON ( meta_field_a.post_id = post.ID AND meta_field_a.meta_key = 'field_a' )
JOIN wp_postmeta meta_field_b ON ( meta_field_b.post_id = post.ID AND meta_field_b.meta_key = 'field_b' )
WHERE post.ID IN (212, 213, 214)
GROUP BY post.ID
) AS results
WHERE results.occurrences > 0
“IF”语句块正在检查关键字,如果找到或找不到它们,则返回1或0(在任何字段中)。将它们加在一起以产生“出现次数”,每行返回一次。
“JOIN”语句块按键名称拉入单个元。每个元键都需要它自己的连接,但显然这不是一个昂贵的操作。
“WHERE”语句将过滤器限制为指定的帖子ID。这些来自外部函数,但您可以使用您自己的where语句替换它,以手动检查帖子类型/状态。但是,由于您正在与用户打交道,您可能根本不想要WHERE(或者您可能想要检查其他用户元,例如角色)。