J'essaie de pirater le widget de catégories par défaut de wordpress. Les catégories sont affichées comme je le souhaite mais je ne parviens pas à modifier la sortie. Le widget affiche le nombre de publications dans chaque publication, ce que je veux, mais il affiche également le nombre entre parenthèses. Je ne veux pas ça. Je sais comment m'en débarrasser mais je n'arrive pas à le faire fonctionner. J'ai essayé comme si
$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;
Il continue simplement d'afficher les catégories de la même manière. Je ne comprends pas pourquoi cela ne fait pas écho à la liste. J'utilise le code pour les catégories du fichier default-widgets.php dans le dossier wp-includes.
wp_list_categories
renvoie la sortie par défaut, votre str_replace
ne fonctionne pas car rien n'a été attribué à $list
.
J'ai également rencontré cette situation et j'ai fini par dupliquer le widget de liste de catégories intégré et de le personnaliser pour répondre à mes besoins. J'ai laissé quelques variations de la regex $ replacement commentée dans le code.
<?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
}
}