web-dev-qa-db-fra.com

comment étendre un WP_widget deux fois

Quelqu'un a-t-il déjà essayé d’étendre WP_Widget, puis de le prolonger?

Ayant associé des widgets, j'ai essayé de créer le premier WP_Widget d'extension:

class FirstWidget  extends WP_Widget {
  public function __construct(){
    parent::__construct(

etc

puis en étendant le premier pour créer le second:

class SecondWidget  extends FirstWidget  {
  public function __construct(){
    parent::__construct(

cela fonctionne bien, sauf que le second widget n'est pas disponible dans la zone glisser-déposer des widgets. Je peux explicitement l'utiliser dans mon code:

the_widget('SecondWidget', array('title'=> "New title")

et ça se voit bien, mais je ne peux pas le glisser-déposer.

Quelqu'un sait pourquoi?

1
Leo

Vous devez vous assurer que tous vos paramètres sont transmis intégralement à la classe WP_Widget. Votre code est très tronqué mais je suis à peu près sûr que c'est ce que vous faites mal.

Le code de widget ci-dessous fonctionne - il ne fait pas grand chose, mais il fonctionne. Voyez si vous pouvez l'utiliser comme modèle pour trier votre propre code.

  class Foo extends WP_Widget {
    /*constructs etc*/
    function __construct($id = 'twidg', $descr = 'Test Widget', $opts = array()) {
      $widget_opts = array();
      parent::__construct($id,$descr,$widget_opts);
      /*do stuff*/
    }

    function widget() {
      echo 'test widget';
    }
  }

function rw_cb() {
  register_widget("Foo");
}
add_action('widgets_init', 'rw_cb');

class Bar extends Foo {     
    function __construct() {
      $widget_opts = array();
      parent::__construct('twidgextended','Test Widget 2',$widget_opts);
    }

    function widget() {
      echo 'test widget 2';
    }
}
function rw_cb_2() {
  register_widget("Bar");
}
add_action('widgets_init', 'rw_cb_2');

Le code provient principalement d'une autre question . J'ai fait des modifications mineures avant de poster ici.

3
s_ha_dum