我正在使用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'); ?>
...但我还有多个条目。
答案 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
中的背景颜色以外的所有样式属性。
在这里工作正常。