web-dev-qa-db-fra.com

Connexion à la boucle de sortie du widget

Lorsque wordpress sidebar génère un registered sidebar particulier, il parcourt tous les widgets qui lui ont été attribués et le sort (je suppose). Il est possible d’accrocher la boucle et d’ajouter du contenu, par exemple . Je souhaite ajouter un code d’annonce tous les trois widgets .

Qu'est-ce que j'ai essayé? Impossible de trouver des pistes. J'ai essayé de chercher sur le code source de wordpress, mais je ne savais pas trop quoi chercher. rechercher widget ou widget loop n'aide pas.

2
Sisir

Accrochez-vous dans 'dynamic_sidebar' et comptez combien de fois il est appelé.

Vous obtenez la barre latérale active actuelle avec key( $GLOBALS['wp_registered_sidebars'] ).

add_action( 'dynamic_sidebar', 'wpse_96681_hr' );

function wpse_96681_hr( $widget )
{
    static $counter = 0;

    // right sidebar in Twenty Ten. Adjust to your needs.
    if ( 'primary-widget-area' !== key( $GLOBALS['wp_registered_sidebars'] ) )
        return;

    if ( 0 !== $counter && 0 === $counter % 3 )
        print '<hr>';

    $counter += 1;
}
3
fuxia

Presque pareil à celui de toscho mais j'ai fait un cours.

class SideBar_Inserter {
  static $count = 0;

  function __construct() {
    add_action( 'dynamic_sidebar', array($this,'insert_into_sidebar') );
  }

  function insert_into_sidebar($s) {
    if (static::$count !== 0 && static::$count%3 === 0) {
      echo static::$count;
    }
    static::$count++;
  }
}
$sidebar_inserter = new SideBar_Inserter;

Ceci est testé. Ça marche.

1
s_ha_dum