首页 文章

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

提问于
浏览
0

我正在一个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

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

    从自定义模板中删除'Project Colors'和'Project Names'自定义字段(叹气),注册名为'Project Classes'的自定义分类法,并将新注册的分类法分配给自定义帖子类型,请参阅here . 在Wordpress界面中,为每个自定义帖子提供相应的'Project Class'香蕉,苹果等,再次在上面的链接中解释 .

    但是,仍然存在如何为每个自定义分类条目显示颜色键的问题 . 我重复使用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"有一个相应的样式表名称 my-first-project ,您可以将其添加到样式表和样式中 . 请注意,在 <div class="legend-color ' 中,我将样式名称添加到现有类中,因此生成的类将为"legend-color my-first-project":即两个样式 . 硬编码类"legend-color"包含除 $sColorName 中背景颜色之外的所有样式属性 .

    在这里工作正常 .

相关问题