【问题标题】:Wordpress users meta managementWordPress 用户元管理
【发布时间】:2014-01-15 21:20:29
【问题描述】:

我开始开发一个拥有 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 中处理用户及其元数据吗?

【问题讨论】:

    标签: wordpress meta


    【解决方案1】:

    我昨天有一个 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 出现在其中(或者您可能想检查其他用户元数据,例如角色)。

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多