Widget múltiple de Wordpress en un solo complemento

2

En mi plugin necesito crear dos widgets. Uno es: rango social "otro es" Rango de perfil ".

Este es el código que estoy usando aquí.

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

Pero no me está mostrando el segundo widget. He encontrado esto pero no puedo encontrar la forma de resolverlo enlace

    
pregunta Ajay Patel 31.03.2012 - 12:37

2 respuestas

5

No hay absolutamente ningún problema con el registro de varios widgets dentro de un archivo. Los widgets son clases separadas y, a diferencia de otros lenguajes de programación, PHP no tendrá ningún problema al declarar dos clases dentro de un archivo.

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 {
    // ...
}
    
respondido por el soulseekah 31.03.2012 - 13:13
0

Ohh mi error

function load_widgets() {
    register_widget( 'Widget_SRC' );
    register_widget( 'Widget_Rank' );
}
    
respondido por el Ajay Patel 31.03.2012 - 13:11

Lea otras preguntas en las etiquetas