Wordpress 用户元管理

问题描述 投票:0回答:1

我开始开发一个拥有 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 -自定义元字段/

3) 创建

custom meta table
来存储值 - 此处描述 http://sltaylor.co.uk/blog/custom-meta-tables-wordpress/

最好的方法是什么?或者还有其他方法可以在 Wordpress 中处理用户及其元数据吗?

wordpress custom-fields
1个回答
0
投票

昨天我有一个类似的问题,询问一个在特定帖子元字段中搜索关键字的系统。

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

但是,下面的改进版本返回找到了多少个关键字(在 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 (或者您可能想检查其他用户元,例如角色)。

© www.soinside.com 2019 - 2024. All rights reserved.