0

我正在一个 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'); ?>

...但我仍然有多个条目。

4

1 回答 1

0

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

从自定义模板中删除“项目颜色”和“项目名称”自定义字段(叹气),注册一个名为“项目类”的自定义分类并将新注册的分类分配给自定义帖子类型,请参见此处。在 Wordpress 界面中,为每个自定义帖子提供适当的“项目类”香蕉、苹果等,在上面的链接中再次说明。

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

在functions.php中添加一个php函数rename_projects,修改“项目类”分类名称中的空格和大写字母,使其适合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.

在这里工作正常。

于 2011-05-13T19:08:02.310 回答