web-dev-qa-db-fra.com

Wordpress multiple widget en un seul plugin

Dans mon plugin, il faut créer deux widgets. L'une est: rang social "l'autre est" rang de profil ".

C'est le code que j'utilise ici.

    <?php
    add_action( 'widgets_init', 'src_load_widgets' );

function src_load_widgets() {
    register_widget( 'Widget_SRC' );
}
function src_load_widgets() {
    register_widget( 'Widget_Rank ' );
}

class Widget_SRC extends WP_Widget {

    function Widget_SRC() {

        $widget_ops = array( 'classname' => 'src', 'description' => __('Several social networks counts and ranking system', 'src') );       
        $control_ops = array( 'width' => 300, 'height' => 350, 'id_base' => 'social-rank' );        
        $this->WP_Widget( 'social-rank', __('Social Rank', 'src'), $widget_ops, $control_ops );
    }


    function widget( $args, $instance ) {
        extract( $args );   
        $title = apply_filters('widget_title', $instance['title'] );    
        echo $before_widget;

        if ( $title )
            echo $before_title . $title . $after_title;

        echo do_shortcode('[SocialRank]');      

        echo $after_widget;
    }

    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;

        $instance['title'] = strip_tags( $new_instance['title'] );
        return $instance;
    }

    function form( $instance ) {

        $defaults = array( 'title' => __('Social Rank', 'src'));
        $instance = wp_parse_args( (array) $instance, $defaults ); ?>
        <!-- Widget Title: Text Input -->
        <p>
            <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'hybrid'); ?></label>
            <input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" style="width:100%;" />
        </p>        

    <?php
    }
}
        class Widget_Rank extends WP_Widget {

            /**
             * Widget setup.
             */
            function Widget_Rank() {
                /* Widget settings. */
                $widget_ops = array( 'classname' => 'rank', 'description' => __('Display profile rank based on vote & social counts.', 'rank') );

                /* Widget control settings. */
                $control_ops = array( 'width' => 300, 'height' => 350, 'id_base' => 'profile-rank' );

                /* Create the widget. */
                $this->WP_Widget( 'profile-rank', __('Profile Rank', 'rank'), $widget_ops, $control_ops );
            }

            /**
             * How to display the widget on the screen.
             */
            function widget( $args, $instance ) {
                extract( $args );

                /* Our variables from the widget settings. */
                $title = apply_filters('widget_title', $instance['title'] );

                /* Before widget (defined by themes). */
                echo $before_widget;

                /* Display the widget title if one was input (before and after defined by themes). */
                if ( $title )
                    echo $before_title . $title . $after_title;

                echo do_shortcode('[SocialRank]');

                /* After widget (defined by themes). */
                echo $after_widget;
            }

            /**
             * Update the widget settings.
             */
            function update( $new_instance, $old_instance ) {
                $instance = $old_instance;

                /* Strip tags for title and name to remove HTML (important for text inputs). */
                $instance['title'] = strip_tags( $new_instance['title'] );
                return $instance;
            }

            /**
             * Displays the widget settings controls on the widget panel.
             * Make use of the get_field_id() and get_field_name() function
             * when creating your form elements. This handles the confusing stuff.
             */
            function form( $instance ) {

                /* Set up some default widget settings. */
                $defaults = array( 'title' => __('Profile Rank', 'rank'));
                $instance = wp_parse_args( (array) $instance, $defaults ); ?>

                <!-- Widget Title: Text Input -->
                <p>
                    <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'hybrid'); ?></label>
                    <input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" style="width:100%;" />
                </p>        

            <?php
            }
        }
         ?>

Mais ce n'est pas moi qui affiche deuxième widget. J'ai trouvé cela, mais je ne savais pas comment le résoudre https://stackoverflow.com/questions/5247302/php-namespace-5-3-and-word-widget/5247436#5247436

2
Ajay Patel

L'enregistrement de plusieurs widgets dans un fichier ne pose aucun problème. Les widgets sont des classes séparées et, contrairement aux autres langages de programmation, PHP n'aura aucun problème à déclarer deux classes dans un même fichier.

add_action( 'widgets_init', 'src_load_widgets' );

function src_load_widgets() {
    register_widget( 'Widget_SRC' );
    register_widget( 'Widget_Rank ' );
}

class Widget_SRC extends WP_Widget {
    // ...
}

class Widget_Rank extends WP_Widget {
    // ...
}
5
soulseekah

Ohh mon erreur

function load_widgets() {
    register_widget( 'Widget_SRC' );
    register_widget( 'Widget_Rank' );
}
0
Ajay Patel