web-dev-qa-db-ja.com

デフォルトカテゴリウィジェットのカスタマイズ

私は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;

カテゴリを同じように表示し続けるだけです。なぜそれがリストに反映されていないのか理解できません。私はwp-includesフォルダのdefault-widgets.phpファイルのカテゴリのコードを使用しています。

3
Jamie

wp_list_categoriesはデフォルトで出力をエコーし​​ます。str_replaceには何も割り当てられていないため、$listは機能しません。

0
Milo

私もこの状況に出くわし、そして組み込みのList Categoriesウィジェットを複製し、そして私のニーズに合うようにそれをカスタマイズしました。私は、コード内でコメントアウトされている$ replacement正規表現のいくつかのバリエーションを残しました。

<?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
  }

}
1
Dave Romsey