首页 文章

小部件类别WordPress,更改显示计数

提问于
浏览
6

使用WordPress和Genesis Framework如果我在侧边栏中添加小部件"Categories",我会显示项目的数量,数字括在括号中 . 例如: (2), (12), (7)...

为实现这一点,我打开了文件wp-includes / category-template.php我找到了以下行:

if ( !empty($show_count) )
        $link .= ' (' . number_format_i18n( $category->count ) . ')';

我按以下方式编辑:

if ( !empty($show_count) )
        $link .= ' <div class="myclass">' . number_format_i18n( $category->count ) . '</div>';

在style.css文件中,我创建了类.myclass,一切都很好用,如下例所示:http://i.imgur.com/vdtCbjm.jpg

但我不认为修改WordPress的核心是一件好事 . 如何在不改变wordpress的情况下获得相同的结果?我想在我的主题的functions.php文件中使用那段代码,但我不知道该怎么做 . 我不是程序员,并发现那段代码已经疯了 . 我使用Genesis Framework,主题子样本 .

感谢您的任何帮助

1 回答

  • 5

    您可以在主题中通过 creating another widget 获得相同的结果 .

    以下代码将创建另一个 Widget .

    您还可以通过更改 $replacement String更改显示 . Remember, Don't change $1, $2, $3, $4 variables.

    将此代码添加到 theme's functions.php 文件中: -

    // Register our tweaked Category Archives widget
    function myprefix_widgets_init() {
        register_widget( 'WP_Widget_Categories_custom' );
    }
    add_action( 'widgets_init', 'myprefix_widgets_init' );
    
    /**
     * Duplicated and tweaked WP core Categories widget class
     */
    class WP_Widget_Categories_Custom extends WP_Widget {
    
        function __construct()
        {
            $widget_ops = array( 'classname' => 'widget_categories widget_categories_custom', 'description' => __( "A list of categories, with slightly tweaked output.", 'mytextdomain'  ) );
            parent::__construct( 'categories_custom', __( 'Categories Custom', 'mytextdomain' ), $widget_ops );
        }
    
        function widget( $args, $instance )
        {
            extract( $args );
    
            $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Categories Custom', 'mytextdomain'  ) : $instance['title'], $instance, $this->id_base);
    
            echo $before_widget;
            if ( $title )
                echo $before_title . $title . $after_title;
            ?>
            <ul>
                <?php
                // Get the category list, and tweak the output of the markup.
                $pattern = '#<li([^>]*)><a([^>]*)>(.*?)<\/a>\s*\(([0-9]*)\)\s*<\/li>#i';  // removed ( and )
    
                // $replacement = '<li$1><a$2>$3</a><span class="cat-count">$4</span>'; // no link on span
                // $replacement = '<li$1><a$2>$3</a><span class="cat-count"><a$2>$4</a></span>'; // wrap link in span
                $replacement = '<li$1><a$2><span class="cat-name">$3</span> <span class="cat-count">($4)</span></a>'; // give cat name and count a span, wrap it all in a link
    
    
            $args = array(
                    'orderby'       => 'name',
                    'order'         => 'ASC',
                    'show_count'    => 1,
                    'title_li'      => '',
                    'exclude'       => '2,5,31',
                    'echo'          => 0,
                    'depth'         => 1,
            );
    
                $subject      = wp_list_categories( $args );
                echo preg_replace( $pattern, $replacement, $subject );
                ?>
            </ul>
            <?php
            echo $after_widget;
        }
    
        function update( $new_instance, $old_instance )
        {
            $instance = $old_instance;
            $instance['title'] = strip_tags( $new_instance['title'] );
            $instance['count'] = 1;
            $instance['hierarchical'] = 0;
            $instance['dropdown'] = 0;
    
            return $instance;
        }
    
        function form( $instance )
        {
            //Defaults
            $instance = wp_parse_args( (array) $instance, array( 'title' => '') );
            $title = esc_attr( $instance['title'] );
            $count = true;
            $hierarchical = false;
            $dropdown = false;
            ?>
            <p>
                <label for="<?php echo $this->get_field_id('title', 'mytextdomain' ); ?>"><?php _e( 'Title:', 'mytextdomain'  ); ?></label>
                <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" />
            </p>
            <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('count'); ?>" name="<?php echo $this->get_field_name('count'); ?>" <?php checked( $count ); ?> disabled="disabled" />
            <label for="<?php echo $this->get_field_id('count'); ?>"><?php _e( 'Show post counts', 'mytextdomain'  ); ?></label>
            
    <?php } }

    希望这会帮助你 .

相关问题