it-swarm.com.de

Wie benutzt man is_active_widget?

Dies ist die Handbuchseite und dies ist der Code .

Aber ich habe immer noch Schwierigkeiten zu verstehen, wie diese Funktion verwendet wird. Vielleicht verwende ich es richtig, aber etwas, an das ich nicht denken kann, ist falsch. Aber sicherer muss ich wissen, was das bedeutet:

  1. callback - Ich nahm an, dass dies der Name der Widget-Klasse war. Habe ich recht?

  2. widget id, was ist das?

  3. id base, was ist das?

  4. Gibt an, ob wp_inactive_widgets eingecheckt werden soll. Was ist wp_inactive_widgets?

Ich habe wirklich das Gefühl, dass das Handbuch diese Dinge nicht erklärt.

Folgendes habe ich zusammengestellt, was nicht funktioniert:

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' );

Das Enqueueing an sich funktioniert, es ist der is_active_widget, der nicht funktioniert. Das Widget selbst funktioniert ebenfalls und wird korrekt angezeigt. Nur die Fancybox, die fehlt.

Hier ist meine Implementierung einer der Antworten, die ich unten erhalten habe, es funktioniert auch nicht:

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

Ich hatte das gleiche Problem und fand keine gute Erklärung für die Funktionsweise der Funktion, da sie anscheinend nicht funktioniert (in meinem Fall wird immer false zurückgegeben).

Betrachtet man den Quellcode , prüft die Funktion im Grunde genommen zwei Dinge, ob der $callbak übereinstimmt, und prüft, ob der $id_base übereinstimmt, ob einer dieser übereinstimmt, und prüft, ob der $widget_id übereinstimmt. Daher muss der Parameter $id_base ausgefüllt werden, damit er mit dem $widget_id funktioniert.

Hier ist mein Beispielcode:

$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