web-dev-qa-db-de.com

wp_register_sidebar_widget () hat mein Widgets-Untermenü deaktiviert - was mache ich falsch?

Arbeiten an einem Thema, das von jemand anderem als offizielle Aufgabe erstellt wurde. Zuerst verursacht es einen Fehler auf der Seite mit den WP-Admin-Widgets - funktioniert überhaupt nicht. Dann kam mir der erste Gedanke: Debuggen ...

Debugging-Schritte
"Aktivierter WP_DEBUG.
"Alle Plugins deaktiviert.
"Auf Standarddesign 'T13' umgestellt.

Fehler
Gefunden, dass das Problem vom Thema war. Das Thema wurde erneut aktiviert und es werden viele DEBUG-Hinweise sowohl im Front-End als auch im Back-End angezeigt. Das erste von ihnen war:

register_sidebar_widget() ist veraltet.

Also ging ich ohne zu zögern zu wp_register_sidebar_widget(). Aber ich befand mich in einer klaustrophobischen Arena - ich weiß nicht genau, wie ich Widgets mit wp_register_sidebar_widget registrieren soll. Aber mit Codex und anderen WP.SE.com-Threads habe ich Folgendes versucht:

<?php
// Register widgetized areas
function theme_widgets_init() {

    // Area 1   
    wp_register_sidebar_widget(
        'primary_widget_area',          //widget_id/ widget_slug
        'Primary Widget Area',          //widget_name
        'primary_widget_display',       //callback function
        array(
            'description' => 'The primary widget on the right side'
        )
    );

    function primary_widget_display( $args ) {

        extract($args);
        echo $before_widget;
        echo $before_title . 'My Unique Widget' . $after_title;
        echo $after_widget;
        // print some HTML for the widget to display here
        echo "Your Widget Test";

    }

    // Area 2

    wp_register_sidebar_widget(
        'secondary_widget_area', //widget_id/ widget_slug
        'Secondary Widget Area', //widget_name
        'secondary_widget_display', //callback function
        array(
            'description' => 'The secondary widget on the right side'
        )
    );

    function secondary_widget_display( $args ) {        
        echo "show the secondary widget";       
    }

} // end theme_widgets_init

add_action( 'init', 'theme_widgets_init' );
?>

PROBLEM 1:

Das Widgets-Untermenü unter dem Appearance-Menü in wp-admin ist komplett verschwunden.

PROBLEM 2:

Ich habe Probleme mit dem neuen callback_function von wp_register_sidebar_widget(). Wie kann ich das alte Seitenleisten-Widget-Design mit dem neuen callback_function implementieren? Wie Sie sehen, habe ich für den primären Widget-Bereich einfach den Code aus Codex kopiert und eingefügt, um zu verstehen, wie der Code funktioniert. Aber als das Problem # 1 auftrat, konnte ich es nicht testen.

Hier ist der Code-Block, der hauptsächlich im Theme verwendet wird, nun veraltet. Wie kann ich den neuen callback_function verwenden, um dasselbe zu tun?

<?php
        // Deprecated Codes Below
        register_sidebar_widget(
            array (
                'name' => 'Secondary Widget Area',
                'id' => 'secondary_widget_area',
                'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
                'after_widget' => "</li>",
                'before_title' => '<h3 class="widget-title">',
                'after_title' => '</h3>',
            )
        );
?>

HINWEIS: Aber der neue Code, den ich oben eingefügt habe, hat eine Sache gelöst - alle DEBUG-Hinweise sind weg. Das ist eine Erleichterung, alHamduLILLAH! :)

1
Mayeenul Islam

Es gibt einige Probleme in Ihrem Code, aber Sie sind nah dran, einige Hinweise, um Probleme zu lösen.

Beseitigen Sie zunächst so viel Code wie möglich, der das Problem noch enthält. Entfernen Sie in Ihrem Fall das zweite Widget. Je weniger Code Sie sich ansehen müssen, desto einfacher ist es, das Problem zu finden.

Verwenden Sie mit anderen Worten die SSCCE : http://sscce.org/

Ein weiterer Ratschlag ist, eindeutige Widget-IDs zu erstellen und Ihren Funktionen ein Präfix zu geben. Die Verwendung von "Primary" und Namen wie "theme_widgets_init" ist keine gute Idee.

Wenn Sie im Menü keine Widgets finden, die unter Darstellung verfügbar sind, ist der Menüpunkt nicht vorhanden überhaupt, weil Sie mindestens eine aktive Seitenleiste mit register_sidebar benötigen.

Sie benötigen mindestens eines der folgenden Elemente:

 function islam_widgets_sidebar() {
    // Area 1, located at the top of the sidebar.
    register_sidebar( array(
        'name' => __( 'Primary Widget Area'),
        'id' => 'primary-widget-area',
        'description' => __( 'The primary widget area'),
        'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
        'after_widget' => '</li>',
        'before_title' => '<h3 class="widget-title">',
        'after_title' => '</h3>',
        ) );
      }
  add_action( 'widgets_init', 'islam_widgets_sidebar' );

Wenn Sie eine Funktion innerhalb einer anderen Funktion verschachteln, muss sich der Rückruf der Anzeige außerhalb der Funktion befinden.

// Register widgetized areas
function islam_theme_widgets() {

    // Area 1
    wp_register_sidebar_widget(
        'mayeenul_widget_area',          //widget_id/ widget_slug
        'Mayeenuls Widget Area',          //widget_name
        'islam_widget_display',       //callback function
        array(
            'description' => 'The primary widget on the right side'
        )
    );

} // end theme_widgets_init

 function islam_widget_display( $args ) {

        extract($args);
        echo $before_widget;
        echo $before_title . 'My Unique Widget' . $after_title;
        echo $after_widget;
        // print some HTML for the widget to display here
        echo "Your Widget Test";

    }

add_action( 'init', 'islam_theme_widgets' );

Für ein zweites Widget würden Sie dasselbe tun, aber natürlich mit unterschiedlichen Funktionscallbacks und IDs/Namen.

Es ist wirklich wichtig zu wissen, dass die obigen Funktionen ziemlich nutzlos sind, da das Widget nur einmal in genau einer der Seitenleisten verwendet werden kann.

Sie möchten die Klasse WP_Widget unbedingt erweitern:
http://codex.wordpress.org/Function_Reference/register_widget

2
Wyck