web-dev-qa-db-fra.com

Widget pour afficher un nuage de tags de taxonomie personnalisé

Comment modifier le widget par défaut pour afficher un nuage de tags d'une taxonomie personnalisée?

4

Je n'en connais pas, mais vous pouvez facilement créer le vôtre:

<?php 
add_action("widgets_init", array('Widget_Custom_tax_tag_cloud', 'register'));
class Widget_Custom_tax_tag_cloud {
    function control(){
        echo 'No control panel';
    }
    function widget($args){
        echo $args['before_widget'];
        echo $args['before_title'] . 'Your widget title' . $args['after_title'];
        $cloud_args = array('taxonomy' => 'Your taxonomy here');
        wp_tag_cloud( $cloud_args ); 
        echo $args['after_widget'];
    }
    function register(){
        register_sidebar_widget('Widget name', array('Widget_Custom_tax_tag_cloud', 'widget'));
        register_widget_control('Widget name', array('Widget_Custom_tax_tag_cloud', 'control'));
    }
}
?>

il suffit de changer: "Votre titre de widget" avec votre titre et Votre "taxonomie ici" avec le nom de votre taxonomie.

vous pouvez modifier l'aspect et la convivialité en transmettant plus d'arguments dans le $ cloud_args à partir de la liste volumineuse du codex

J'espère que cela t'aides.

4
Bainternet

La réponse existante est excellente, mais malheureusement, en raison de l’âge de la réponse, elle ne fonctionne pas pour les nouvelles versions de WordPress.

Le code ci-dessous s’améliore de deux manières:

1 - Il s’agit de la méthode recommandée/de meilleure pratique pour les nouvelles versions de WordPress, à compter de version 2.8

2 - Il vous permet de sélectionner la taxonomie via l'interface du tableau de bord, plutôt que de la coder en dur.

add_action( 'widgets_init', 'custom_register_plugin_widget' );

function custom_register_plugin_widget() {
    register_widget( 'Widget_Custom_Tax_Tag_Cloud' );
}

/**
 * New "best practice" is to extend the built-in WP_Widget class
 *
 * Class Widget_Custom_tax_tag_cloud
 */
class Widget_Custom_Tax_Tag_Cloud extends WP_Widget {
    function __construct() {
        parent::__construct( 'custom_tax_tag_cloud', 'Custom Taxonomy Tag Cloud', array( 'description' => 'Display a tag cloud for a custom taxonomy.' ) );
    }

    /**
     * Allows for manipulation, calculation, etc. when saving the widget instance in the dashboard.
     *
     * @param array $new_instance
     * @param array $old_instance
     *
     * @return array
     */
    function update( $new_instance, $old_instance ) {
        return $new_instance;
    }

    /**
     * Echos the widget contents in a sidebar
     *
     * @param array $args - the general widget arguments
     * @param array $instance - the settings for this specific widget
     */
    function widget( $args, $instance ) {
        echo $args['before_widget'];
        echo $args['before_title'] . 'Your widget title' . $args['after_title'];
        $cloud_args = array( 'taxonomy' => 'catalogtag' );
        wp_tag_cloud( $cloud_args );
        echo $args['after_widget'];
    }

    /**
     * Render the "Controls" in the dashboard menu under Appearance => Widgets
     *
     * @param array $instance - the settings for this instance of the widget
     *
     * @return null
     */
    function form( $instance ) {
        $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'taxonomy' => 'post_tag' ) );

        // Load the list of taxonomies available
        $taxonomies = get_taxonomies( array( 'public' => TRUE , 'show_tagcloud' => TRUE), 'objects' );

        echo '<p><label>Title</label><input name="' . $this->get_field_name( 'title' ) . '" id="' . $this->get_field_id( 'title' ) . '" value="' . esc_attr( $instance['title'] ) . '" /></p>';
        echo '<p><label>Taxonomy</label><select name="' . $this->get_field_name('taxonomy') . ' id="' . $this->get_field_id('taxonomy') . '">';
        echo '<option value="">Select Taxonomy...</option>';
        foreach($taxonomies AS $tax) {
            echo '<option value="' . $tax->name . '"';
            echo ($tax->name == $instance['taxonomy']) ? ' selected' : '';
            echo '>';
            echo ( ! empty($tax->labels->singular_name)) ? $tax->labels->singular_name : $tax->label;
            echo '</option>';
        }
        echo '</select></p>';
    }
}

Techniquement, vous pourriez simplement ajouter ceci au fichier de fonctions de votre thème, mais j'ai tendance à préférer le placer dans un fichier de thème séparé (tel que widgets.php, et l'inclure dans le fichier de fonctions.

0
cale_b