Wordpress用户元管理

时间:2014-01-15 21:20:29

标签: wordpress meta

我开始使用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中使用用户及其元数据吗?

1 个答案:

答案 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(或者您可能想要检查其他用户元,例如角色)。