Настройка по умолчанию Категории Виджет

Я пытаюсь взломать виджет категории по умолчанию из wordpress. У меня есть категории, отображающие то, что я хочу, но у меня возникают проблемы с редактированием вывода. Виджет показывает количество сообщений в каждом столбце, которое я хочу, но также отображает число в скобках. Я не хочу этого. Я знаю, как избавиться от них, но я не могу заставить его работать. Я так пробовал

$cat_args['title_li'] = ''; $list = wp_list_categories(apply_filters('widget_categories_args', $cat_args)); $list .= str_replace('(', '<span class="number">', $list); $list .= str_replace(')', '<span class="number">', $list); echo $list; 

Он просто продолжает показывать категории одинаково. Я не понимаю, почему это не повторяет список. Я использую код для категорий из файла default-widgets.php в папке wp-includes.

Solutions Collecting From Web of "Настройка по умолчанию Категории Виджет"

wp_list_categories эхо выводит по умолчанию, str_replace не работает, потому что ничего не было присвоено $list .

Я тоже столкнулся с этой ситуацией и в итоге дублировал встроенный виджет «Категории категорий» и настроил его в соответствии со своими потребностями. Я оставил пару вариаций регулярного выражения $ replace, прокомментированного в коде.

 <?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 $subject = wp_list_categories( 'echo=0&orderby=name&exclude=&title_li=&depth=1&show_count=1' ); 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><br /> <?php } } по <?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 $subject = wp_list_categories( 'echo=0&orderby=name&exclude=&title_li=&depth=1&show_count=1' ); 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><br /> <?php } }