web-dev-qa-db-fra.com

Comment utiliser is_active_widget?

Ceci est la page de manuel et ceci est le code .

Mais j'ai encore du mal à comprendre comment utiliser cette fonction. Peut-être que je l'utilise correctement, mais quelque chose auquel je ne peux pas penser est faux. Mais plus sûrement, j'ai besoin de savoir ce que cela signifie:

  1. callback - J'ai supposé que c'était le nom de la classe Widget. Ai-je raison?

  2. widget id, qu'est-ce que c'est?

  3. id base, c'est quoi?

  4. S'il faut archiver wp_inactive_widgets. Qu'est-ce que wp_inactive_widgets?

J'ai vraiment l'impression que le manuel n'explique pas ces choses.

Voici quelque chose que je mets ensemble qui ne fonctionne pas:

function cbs_register_widgets() {
    register_widget( 'cbs_map_widget' );
}

add_action( 'widgets_init', 'cbs_register_widgets' );

function cbs_enqueue_resources() {

    if ( is_active_widget( 'cbs_map_widget' ) ) {
        wp_enqueue_script( 'fancybox-js', plugins_url( '/fancybox/jquery.fancybox-1.3.4.pack.js', __FILE__), array( 'jquery' ), '1.3.4' );
        wp_enqueue_style( 'fancybox-css', plugins_url( '/fancybox/jquery.fancybox-1.3.4.js', __FILE__ ), '', '1.3.4' );
    }

    wp_enqueue_script( 'cbs-widgets-js', plugins_url( '/js/cbs-widgets.js', __FILE__ ), array( 'jquery' ) );
    wp_enqueue_style( 'cbs-widgets-css', plugins_url( '/css/style.css', __FILE__ ) );

}

add_action( 'template_redirect', 'cbs_enqueue_resources' );

La mise en file d'attente en elle-même fonctionne, c'est le is_active_widget qui ne fonctionne pas. Le widget lui-même fonctionne également et s’affiche correctement. Juste le fancybox js qui manque.

Voici ma mise en œuvre d'une des réponses que j'ai eu ci-dessous, cela ne fonctionne pas non plus:

class cbs_map_widget extends WP_Widget
{
    function cbs_map_widget()
    {
        $ops = array('classname' => 'cbs-map-widget', 'description' => 'Visar en karta över Chalmers område där lokaler som används av Sällskapet har markerats.');

        $this->WP_Widget('cbs-map-widget', 'CBS kartwidget', $ops);
    }

    function widget($args, $instance)
    {
        extract($args);

        echo $before_widget;

        echo '<div class="overline">text</div>';
        echo '<a href="#" class="cbs-map-widget"><img src="' . plugins_url( '/images/map.png', __FILE__ ) . '" title="" /></a>';

        echo $after_widget;

        add_action('wp_enqueue_scripts', array(&$this, 'js'));
    }

    function js()
    {
        if ( is_active_widget(false, false, $this->id_base, true) ) {
            wp_enqueue_script( 'fancybox-js', plugins_url( '/fancybox/jquery.fancybox-1.3.4.pack.js', __FILE__), array( 'jquery' ), '1.3.4' );
            wp_enqueue_style( 'fancybox-css', plugins_url( '/fancybox/jquery.fancybox-1.3.4.js', __FILE__ ), '', '1.3.4' );
        }
    }

}
6
user5028

J'avais le même problème et je n'ai pas trouvé de bonne explication sur le fonctionnement de la fonction, car elle ne semblait pas fonctionner (renvoie toujours false dans mon cas).

En regardant le code source , la fonction vérifie essentiellement deux choses: elle vérifie si le $callbak correspond, et si le $id_base correspond, si l'une de ces correspondances, puis vérifie si le $widget_id correspond. Donc, le param $id_base doit être rempli pour que cela fonctionne avec le $widget_id.

Voici mon exemple de code:

$id_base = _get_widget_id_base($widget_id);
if(is_active_widget(false, $widget_id, $id_base)){
    // Your code here ...
} else {
    // Else code here ...
}
2
Aruberuto