Wordpress仅获得唯一的自定义字段值

时间:2011-05-09 16:28:53

标签: wordpress custom-fields

我正在使用Wordpress网站,该网站显示存储在自定义帖子类型中的许多项目。每个自定义帖子包括两个自定义字段(以及其他)“项目名称”和“项目颜色”。可能有几个关于特定“项目名称”的自定义帖子。

我想创建所有项目的图例(一个键),列出从上面的自定义字段值中获取的“项目名称”和“项目颜色”。

例如,我有3个名为“Bananas”的项目,其颜色为“Yellow”,6个名为“Oranges”,颜色为“orange”,4个名为“Apples”,颜色为“green”。我的传奇(关键)应该显示一个黄色的香蕉,一个橙色的橙色和一个绿色的苹果。

当然,如果我使用它,它会显示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'); ?>

...但我还有多个条目。

1 个答案:

答案 0 :(得分:0)

这是我的工作解决方案......

从自定义模板中删除“项目颜色”和“项目名称”自定义字段(叹息),注册名为“项目类”的自定义分类,并将新注册的分类法分配给自定义帖子类型,请参阅{{3 }}。在Wordpress界面中,为每个自定义帖子提供适当的“项目类”香蕉,苹果等,再次在上面的链接中解释。

但是,仍然存在如何为每个自定义分类条目显示颜色键的问题。我重复使用Project Class名称作为样式表名称,因此我可以为每个样式名称指定背景颜色。但是,真正的Project Class名称需要删除大写字母和空格,以使它们对样式表友好。

在functions.php中添加一个php函数rename_projects,它修改了“Project Class”分类名称中的空格和大写字母,并使其适用于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中的背景颜色以外的所有样式属性。

在这里工作正常。