2011-05-09 84 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中的背景色之外的所有样式属性。

在这里工作很好。