2014-01-15 31 views
0

我开始开发与cca 5000用户的Worpdress门户。每个用户将具有cca 20元值(如街道,城市等)。WordPress的用户元管理

我需要做一些关于用户元数据的分页/排序的报告,我很好奇什么才是最有效的方法。

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

昨天我有一个similar question为一个系统搜索关键字的特定postmeta字段。

如果任何一个字段包含搜索词,上述链接上的答案将返回帖子。

但是,下面的改进版本会返回找到关键字的多少个(在关键字的0到#之间,而不是在每个字段中找到的关键字的实际计数)。

仅供参考后期元和用户元表基本上是相同的东西,这应该适合你。您可以使用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(或者你想检查其他用户元,比如角色)。

+0

谢谢,我结束使用JOINS也... – user1049961