2011-05-09 81 views
0

我正在一個Wordpress網站上顯示存儲在自定義帖子類型中的大量項目。每個自定義帖子包括兩個自定義字段(除其他外)「項目名稱」和「項目顏色」。可能會有幾個關於特定「項目名稱」的自定義帖子。Wordpress獲取唯一的自定義字段值

我想創建一個所有項目的圖例(一個關鍵),其中列出了從上面的自定義字段值中獲取的「項目名稱」和「項目顏色」。例如,我有3個項目叫做「香蕉」,顏色是「黃色」,6個叫做「桔子」,顏色是「橙色」,4個叫做「蘋果」,顏色是「綠色」。我的傳奇(鑰匙)應該顯示一個黃色的香蕉,一個橙色的橙色和一個綠色的蘋果。

當然,如果我使用循環它顯示3香蕉,6橙子和4蘋果。如何顯示項目名稱和項目顏色列表?

我看了三種方法,一種是自定義分類法,檢查數組中的重複項並使用GROUP BY作爲posts_groupby上的篩選器。

GROUP BY似乎是正確的方式去,但我不能讓它做任何事情。我得到的最遠是把這個在我的functions.php ...

function sort_legend ($groupby) { 
    global $wpdb; 
    $groupby .= "{$wpdb->postmeta}.meta_key = 'Color' "; 
    return $groupby; 
} 

...然後把它當成我的周圍Query對象的過濾器...

<?php add_filter('posts_groupby', 'sort_legend'); ?> 
<?php if ($myQuery->have_posts()) while ($myQuery->have_posts()) : $myQuery->the_post(); ?> 
<?php remove_filter('posts_groupby', 'sort_legend'); ?> 

...但我仍然有多個條目。

回答

0

這是我工作的解決方案......

刪除「項目顏色」,並從自定義模板「項目名稱」自定義字段,(嘆氣),寄存器被稱爲「工程類」自定義分類和分配新登記的自定義帖子類型,請參閱here。在Wordpress界面中,爲每個自定義帖子分配適當的'Project Class'香蕉,蘋果等,在上面的鏈接中再次解釋。

但是,仍然存在如何爲每個自定義分類條目顯示顏色鍵的問題。我重用了Project Class的名稱作爲樣式表名稱,這樣我就可以爲每個樣式名稱設置背景顏色。然而,真正的項目類名稱有大寫字母和空格,需要刪除它們才能使它們適合樣式表。

添加一個PHP函數rename_projects在functions.php的是修訂了空格和大寫字母在「Project類」的分類名稱,使其適用於CSS樣式的名字,我用...

// Rename Projects custom field for css styles 
function rename_projects($sProjectName) { 
$sFind = ' '; 
$sReplace = '-'; 
$sAmended = mb_strtolower(str_replace($sFind, $sReplace, $sProjectName)); 
return $sAmended; 
} 

現在,您可以將您的項目類名稱用作樣式表名稱。

接下來,在你的頁面模板所以現在顯示您的自定義分類從而...

<?php 
    $args=array(
    'taxonomy' => 'projectclass', 
    'orderby' => 'name', 
    'order' => 'ASC' 
    ); 
    $categories=get_categories($args); 
    foreach($categories as $category) { 
     $sColorName = rename_projects($category->name); // To lower case and replace spaces 
     echo '<div class="legend-color ' . $sColorName . '"></div> // Color style name 
     <div class="legend-project">' . $category->name . '</div>'; // Taxonomy name 
    } 
?> 

例如$category->name「我的第一個項目」有一個相應的樣式表名稱my-first-project,您可以添加到您的風格工作表和樣式。請注意,在<div class="legend-color '中我樣式名稱添加到現有類中,因此生成的類將爲「legend-color my-first-project」:即兩種樣式。硬編碼類「legend-color」保存了除$sColorName中的背景色之外的所有樣式屬性。

在這裏工作很好。