2014-01-15 32 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