Unterscheiden Sie zwischen verschiedenen Widgets desselben Typs

Ich spiele ein wenig mit WordPress-Widgets und versuche, so etwas zu tun:

Ich habe eine Sidebar und ein Widget erstellt, um einen Schieberegler mit den neuesten Posts anzuzeigen. Der jQuery Loader ist ungefähr so:

jQuery('#slider-wrap-id').mySlider({ //args }); 

Ok, es gibt keine Probleme, wenn Benutzer einen dieser Schieberegler der Sidebar hinzufügen. Wenn jedoch zwei oder mehr Schieberegler hinzugefügt wurden, gibt es Probleme, da die Schleifer-Wrap die gleiche ID haben.

 

Mein Ansatz ist im Moment folgender:

In der Widget-function erstelle ich einen Hook mit Parametern, um den Slider so zu laden.

Hinweis: Pseudocode

 class Vi_Posts_Slider_Widget extends WP_Widget { function Pi_Posts_Slider_Widget() { //register args } //the key function to solve my problem, maybe :) function widget( $args, $instance ) { //extract, WP_Query to retrive posts ... //ok now the key, I want to define slider id dynamically 
//finally generate hook to load slider do_action('vi_posts_slider_widget', array(......, 'slider_id' => $sid ) ); } // update and form functions } //load individual sliders with diferent id and arguments function vi_load_slider($sldier_opts){ jQuery('').mySlider({ //args using $slider_opts }); } add_action('vi_posts_slider_widget', 'vi_load_slider');

Das einzige Argument, das ich brauche, ist die aktuelle Widget-ID . Wenn ich beispielsweise Seitenleisten registriere, habe ich Folgendes erstellt:

 register_sidebar(array( 'name' => __('Default Sidebar', "theme_textdomain"), 'before_widget' => '
', // $s provide the single id //............ ));

Auf diese Weise sehen die Ergebnisse so aus.

 
.......

Ich versuche den gleichen Ansatz zu finden, um eindeutige Schieberegler-IDs zu definieren. Wenn Sie einen Rat oder einen Vorschlag haben, drücken Sie mich bitte in die richtige Richtung.

PD: Entschuldigung für mein Englisch, ich lerne gleichzeitig WordPress und Englisch 🙂

Solutions Collecting From Web of "Unterscheiden Sie zwischen verschiedenen Widgets desselben Typs"

Die korrekte Praxis besteht darin, $args['before_widget] und $args['after_widget'] zu verwenden, um die ID, die class und alles andere zu behandeln. Im Pseudocode:

 class My_Widget extends WP_Widget { function My_Widget() { //basic widget settings. $widget_ops = array( 'classname' => 'my-name', 'description' => 'This is the description' ); //widget control settings. $control_ops = array( 'id_base' => 'my-name-widget' ); //create widget $this->WP_Widget( 'my-name-widget', 'Widget Title', $widget_ops, $control_ops ); } function widget( $args, $instance ) { // split $args extract( $args ); /* Our variables from the widget settings. */ $title = apply_filters( 'widget_title', $instance['title'] ); //apply any additional settings here /* 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; // do all the widget output /* After widget (defined by themes). */ echo $after_widget; } } 

Wenn Sie immer noch ein wenig verwirrt sind, print_r() $args und Sie werden sehen, was Sie alles zur Verfügung haben. Wenn Sie immer noch verwirrt sind, hat Justin Tadlock eine großartige Anleitung , die Sie in die richtige Richtung bringen wird.

Es ist wichtig, dass Sie $before_widget und $after_widget denn wenn jemand die Widgets mit

  • s registrieren würde und Sie , wären sie ziemlich schnell entweder frustriert oder entfernen sich einfach von Ihrem Code.