是否通过后端从模板中排除分类术语?

时间:2014-08-18 作者:streetfire

我想知道你是否能帮我解决一个问题或提供其他想法。

我有一个档案,在网格视图中显示自定义税务术语列表。

我的客户需要能够打开/关闭在网格中显示的条款。如果这些是帖子,这将很容易,因为我可以简单地让他选中/取消选中该帖子的类别。然而,分类法没有现成的功能。

有人知道我如何做到这一点吗?

3 个回复
最合适的回答,由SO网友:streetfire 整理而成

我找到了解决办法。感谢@Tarukus,因为他的回答很有帮助。同样,我的目标是通过开/关开关显示自定义分类法中的术语(而不是帖子)。为此,我使用了高级自定义字段并创建了一个带有两个值(开/关)的“选择”字段。将此字段应用于我的分类法后,我可以为每个术语选择一个值。默认值设置为“off”。现在,为了只显示设置为“on”的术语,我必须在模板文件中添加以下代码,当然还要将一些术语设置为“on”。

 <?php

    $terms = get_terms(\'MYTAXONOMY\', array());      

    if($terms)

    {

        echo \'<ul>\';

        foreach($terms as $term)

        {


            if( get_field(\'ENTERCUSTOMFIELDSLUG\', \'ENTERMYTAXONOMY_\'.$term->term_id) != \'ENTERFIELDVALUE\' ) 
                        continue;

            echo \'<li>\' . $term->name . \'</a></li>\';

        }

        echo \'</ul>\';

    }

SO网友:Taruc

您可以使用高级自定义字段完成此操作:http://www.advancedcustomfields.com/resources/taxonomy/

可以将字段组(如“分类法”字段)指定给模板。编辑分类法归档页面时,用户将看到分类法术语的复选框(或单选按钮或选择菜单)。

在相应的“分类法存档”模板中(来自上面的链接)。。。

<?php 

$terms = get_field(\'taxonomy_field_name\');

if( $terms ): ?>

    <ul>

    <?php foreach( $terms as $term ): ?>

        <a href="<?php echo get_term_link( $term ); ?>"><?php echo $term->name; ?></a>

    <?php endforeach; ?>

    </ul>

<?php endif; ?>

SO网友:aifrim

Hy,

据我所知,您需要一个过滤器来显示属于特定术语列表的帖子。默认情况下,显示启用所有术语的所有帖子。为了禁止显示术语,需要将其从循环中排除。

<?php
// we get all the terms of the taxonomy
$terms = get_terms(\'mytaxonomy\');

/*
excludeTerms=term1,term2,term3
as a GET parameter created by the exclude form
*/
$excludeList = array();

if (isset($_GET[\'excludeTerms\']) && !empty($_GET[\'excludeTerms\'])) {
    $excludeList = explode(\',\', $_GET[\'excludeTerms\']);
}

/*
how to display the available terms
the permalink is get_term_link($term, $taxonomy);
*/
$termList = \'\';
if (!empty($terms) && !is_wp_error($terms)) {
    echo "<ul>";
    foreach ($terms as $term) {
        if (!in_array($term->name, $excludeList)) {
            echo "<li class=\'enabled-term\'>" . $term->name . "</li>";
            if ($termList == \'\') {
                $termList = $term->name;
            } else {
                $termList .= \', \' . $term->name;
            }
        } else {
            echo "<li class=\'disabled-term\'>" . $term->name . "</li>";
        }
    }
    echo "</ul>";
}

if ($termList != \'\') {
    $args = array(
        \'post_type\' => \'posttype\',
        \'mytaxonomy\' => $termList
    );
} else {
    $args = array(
        \'post_type\' => \'posttype\'
    );
}
query_posts($args);
while (have_posts()) {
    the_post();
    the_title();
    echo "<br />";
}
?>
    <style>
        .enabled-term, .disabled-term {
            cursor: pointer;
        }

        .disabled-term {
            color: #ddd;
        }
    </style>
    <script>
        jQuery(document).ready(function ($) {
            $(\'.enabled-term\').live(\'click\', function () {
                // so that one term remains enabled
                if ($(\'.enabled-term\').length == 1)
                    return;
                $(this).removeClass(\'enabled-term\').addClass(\'disabled-term\');
                navigate();
            });
            $(\'.disabled-term\').live(\'click\', function () {
                $(this).removeClass(\'disabled-term\').addClass(\'enabled-term\');
                navigate();
            });
            function navigate() {
                list = $(\'.disabled-term\');
                excludeList = \'\';
                for (i = 0; i < list.length; i++) {
                    if (excludeList == \'\')
                        excludeList = $(list[i]).text();
                    else
                        excludeList += \',\' + $(list[i]).text();
                }
                window.location = window.location.origin + 
                                  window.location.pathname + 
                                  \'?excludeTerms=\' + excludeList;
            };
        }(jQuery));
    </script>
http://codex.wordpress.org/Function_Reference/get_terms 对于术语列表http://codex.wordpress.org/query_posts 用于循环(示例5用于税务和条款)

希望这有帮助。

结束