在两列中的侧栏中显示自定义分类

时间:2011-08-09 作者:devopix

我有一个自定义的帖子类型(照片)和一个自定义的分类法(类别),我想在侧边栏中以两列的形式显示分类法列表。我在其他地方找到了一个修改后的代码段来实现这一点,但它不会为它所在的特定类别生成当前类。也许这不是开始列出分类法的最佳方式,所以我希望有人能提出更好的解决方案。

以下是我现在拥有的:

<?php $term = get_term_by( \'name\', \'categories\', \'photos\' );
      $cat_term_id = $term->term_id;

$cats = explode("<br />",wp_list_categories("title_li=&echo=0&child_of=$cat_term_id&depth=1&style=none&taxonomy=categories"));
$cat_n = count($cats) - 1;
for ($i=0;$i<$cat_n;$i++):
if ($i<$cat_n/2):
$cat_left = $cat_left.\'<li>\'.$cats[$i].\'</li>\';
elseif ($i>=$cat_n/2):
$cat_right = $cat_right.\'<li>\'.$cats[$i].\'</li>\';
endif;
endfor;
?>
<ul class="left">
<?php echo $cat_left;?>
</ul>
<ul class="right">
<?php echo $cat_right;?>
</ul>
谢谢!

4 个回复
SO网友:kaiser

作为对@Rutwick Gangurde答案的跟进,这里有一个例子。

笔记:

将其放入您的功能中。php文件,在模板文件中调用它

  • 通过检查$term 在foreach循环内阅读函数内的注释-

        function wpse25433_terms_list( $cat = array(\'categories\'), $el = \'li\', $echo = true )
        {
        global $post;
        $post_id = $post->ID;
    
        $terms = wp_get_object_terms( 
            $post_id, 
            $cat, 
            array( 
                 \'orderby\' => \'name\'
                ,\'order\'   => \'ASC\'
                ,\'fields\'  => \'all\' 
        );
    
        $counter = count ( $terms );
        $i = 1;
        $left = $right = \'\';
        foreach ( $terms as $term )
        {
            # uncomment the following line to inspect the $term object
            // echo \'<pre>\'; print_r( $term ); echo \'</pre>\';
            $i++;
            if ( $i < $counter / 2 )
                $left .= \'\'; // @example: $term[\'name\'];
            else 
                $right .= \'\'; // @example: $term[\'whatever_value_you_need\'];
            $i++;
        }
    
        $el_cont = \'ul\';
        if ( $el !== \'li\' )
            $el_cont = $el = \'div\';
        $output  = "<{$el_cont} class=\'terms-container\'>";
        $output .= "<{$el} class=\'terms-left\'>{$left}</{$el}>";
        $output .= "<{$el} class=\'terms-right\'>{$right}</{$el}>";
        $output .= "</{$el_cont}>";
    
        if ( $echo )
            return print $output;
    
        return $output;
    }
    
    // Use it in your template like this:
    wpse25433_terms_list( array( \'name\', \'some\', \'taxonomies\' ), \'li or div\', true );
    

  • SO网友:Rutwick Gangurde

    这是我工作的一种方式(请检查随附的图片)。只是我把它作为一个短代码,您可以根据需要使用函数/代码。也用你的分类法代替分类法,我用我的

    add_shortcode(\'dis\', \'displayascols\');
    function displayascols()
    {
        $cats = get_terms(\'companycategory\', array(\'hide_empty\'=>0));
        $l = count($cats);
    
        if($l%2 == 1)
        {
            $l_even = $l-1;
            $l_half = $l_even/2;
    
            $cat_1 = array_slice($cats, 0, $l_half);
            $cat_2 = array_slice($cats, $l_half);
        }
        else
        {
            $l_even = $l/2;
    
            $cat_1 = array_slice($cats, 0, $l_even);
            $cat_2 = array_slice($cats, $l_even);
        }
    
        $cat_left = \'\';
        $cat_right = \'\';
    
        for ($i=0; $i<count($cat_1); $i++){
            $cat_left .= \'<li><a href=\'.$cat_1[$i]->slug.\'>\'.$cat_1[$i]->name.\'</a></li>\';
        }
    
        for ($i=0; $i<count($cat_2); $i++){
            $cat_right .= \'<li><a href=\'.$cat_2[$i]->slug.\'>\'.$cat_2[$i]->name.\'</a></li>\';
        }
        ?>
    
        <ul class="left" style="float: left;">
            <?php echo $cat_left;?>
        </ul>
        <ul class="right" style="float: right;">
            <?php echo $cat_right;?>
        </ul><?php
    }
    
    让我知道!here's the output

    SO网友:Rutwick Gangurde

    您可以使用wp_get_object_terms. 它返回一个数组,使您可以更好地控制显示。

    SO网友:koskoz

    假设您从一个经典列表开始,那么您可以使用一些CSS来完成它(<ul class="foo"><li></li></ul>) :

    .foo {
        -moz-column-count: 2;
        -moz-column-gap: 10px;
        -webkit-column-count: 2;
        -webkit-column-gap: 10px;
        column-count: 2;
        column-gap: 10px;
    }
    
    对于较旧的浏览器,只需使li浮动即可。

    结束