2013-01-08 44 views
0

我的問題放在一起很多事情,這很可能是爲什麼我不能讓它爲它工作。使用多個分類法和日期作爲自定義屬性的Wordpress上的自定義查詢VarChar

我並不熟悉很長的SQL查詢,並且我不是很喜歡Wordpress,但我被要求修正特定頁面上的排序,爲了做到這一點,我需要通過自定義屬性。

我想這一點,但沒有奏效:

$query = array(
    'post_type' => 'custom_post_type', 
    'meta_key' => 'key_for_meta', 

    'orderby' => 'STR_TO_DATE(meta_value, "%d/%m/%Y")', 
    'order' => 'DESC', 
    'first_taxonomy' => $first_taxonomy, 
    'second_taxonomy' => $second_taxonomy 
); 

這將是理想的解決方案,如果有人知道如何使這項工作,我很想知道。

我已經嘗試key_for_meta而不是meta_valueorderby上,並嘗試指向右邊的table.column等等。

經過大量嘗試,我失去了所有的希望,並試圖創建一個查詢。它是這樣的:

SELECT p.*, 
m.meta_key, m.meta_value, 
tt.taxonomy as s_tax, 
t.slug 
FROM wp_posts AS p 
INNER JOIN wp_postmeta AS m ON p.ID = m.post_id AND m.meta_key = 'key_for_meta' 
INNER JOIN wp_term_relationships AS tr ON p.ID=tr.object_id 
**INNER JOIN wp_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id 
INNER JOIN wp_terms AS t ON tt.term_id = t.term_id** 

WHERE 1 = 1 
    AND wp_posts.post_type = 'custom_post_type' 
    AND wp_posts.post_status = 'publish' 

    **AND t.slug = '$first_taxonomy' 
    AND t.slug = '$second_taxonomy'** 

GROUP BY wp_posts.ID 
ORDER BY STR_TO_DATE(m.meta_value, '%d/%m/%Y') ASC"; 

任何解決方案將不勝感激。我不在乎問題如何解決,我只是希望它能夠完美地工作。如果它還可以看起來不錯,完美,但我放棄了這一點。

日期格式爲DD/MM/YYYY。 按照要求,有的來自wp_postmeta列:

meta_id post_id meta_key meta_value 
5101  3521  data_prova 12/01/2013 
5114  3526  data_prova 02/03/2013 
5165  3554  data_prova 02/03/2013 

另外,我不能讓分類法對我進行的查詢工作,但。

好消息:我做了幾乎所有的工作。唯一的問題是,我無法讓它與兩個分類法一起工作,但是如果我只嘗試一個,它就可以工作。

+0

費爾南多,你可以編輯你的問題給我們幾個你的wp_postmeta行的例子嗎? '會幫助。 –

回答

0

因此,對於具有相同問題的人:

我無法弄清楚如何在只SQL做的,所以我使用WordPress的has_term()測試的分類法。我的解決方案如下:

SELECT DISTINCT p.*, 
m.meta_key, m.meta_value, 
tt.taxonomy, tt.term_id, 
t.slug 
FROM wp_posts AS p 
INNER JOIN wp_postmeta AS m 
    ON p.ID = m.post_id 
    AND m.meta_key = 'key_for_meta' 
INNER JOIN wp_term_relationships AS tr 
    ON p.ID = tr.object_id 
INNER JOIN wp_term_taxonomy AS tt 
    ON tr.term_taxonomy_id = tt.term_taxonomy_id 
INNER JOIN wp_terms AS t 
    ON tt.term_id = t.term_id 
WHERE 1 = 1 
    AND p.post_type = 'custom_post_type' 
    AND p.post_status = 'publish' 
    AND (
    t.slug = '$first_taxonomy' 
    ) 
ORDER BY STR_TO_DATE(m.meta_value, '%d/%m/%Y') ASC 

加上這個PHP啓動和運行的循環:

$posts = $wpdb->get_results($queryRaw); 

if ($wpdb->num_rows > 0) { 

foreach ($posts as $post) { 
    $stored_post = clone $GLOBALS['post']; 
    $GLOBALS['post'] = $post; 

    setup_postdata($post); 
    if (has_term($first_taxonomy, 'first_taxonomy', $post->ID) && has_term($second_taxonomy, 'second_taxonomy', $post->ID)) { 
    ... 

,剩下的就是像往常一樣。所有方法工作,因爲我設置全球$post

我會離開這個問題,開始討論其他人有什麼貢獻,我很樂意看到更多關於如何處理這個問題的想法,我真的很想要一個純粹的Wordpress或至少純粹的SQL解決方案(關於我必須使用PHP進行的測試)。

相關問題