web-dev-qa-db-fra.com

wp_register_sidebar_widget () a disparu de mon sous-menu Widgets - qu'est-ce que je fais mal?

Travailler sur un thème fait par quelqu'un d'autre en tant que devoir officiel. Au début, cela provoque une erreur dans la page des widgets wp-admin - ne fonctionne pas du tout. La première idée qui me vint à l’esprit fut le débogage ...

étapes de débogage
"Activé WP_DEBUG.
"A désactivé tous les plugins.
"Passé au thème par défaut 'T13'.

Erreurs
A constaté que le problème venait du thème. Activez à nouveau le thème et affiche de nombreux avis DEBUG à la fois dans les interfaces frontale et principale. Le premier d'entre eux était:

register_sidebar_widget() est obsolète.

Alors sans hésitation je suis allé à wp_register_sidebar_widget(). Mais je me suis retrouvé dans une arène claustrophobe - je ne sais pas comment enregistrer des widgets avec wp_register_sidebar_widget. Mais avec Codex et d’autres threads WP.SE.com, j’ai essayé ce qui suit:

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

PROBLÈME N ° 1:

Le sous-menu Widgets du menu Apparence dans wp-admin est totalement supprimé.

PROBLÈME N ° 2:

Je me bats avec le nouveau callback_function of wp_register_sidebar_widget(). Comment puis-je implémenter l'ancienne conception du widget de la barre latérale avec le nouveau callback_function. Donc, pour la zone principale du widget, vous pouvez voir, j'ai simplement copié et collé le code du Codex pour comprendre son fonctionnement. Mais comme le problème n ° 1 s'est produit, je suis incapable de les tester.

Voici le bloc de code principalement utilisé dans le thème, il est maintenant obsolète. Comment puis-je utiliser le nouveau callback_function pour faire de même?

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

NOTE: Mais le nouveau code que j'ai collé en haut résolvait une chose: tous les avis DEBUG ont disparu. C'est un soulagement, alHamduLILLAH! :)

1
Mayeenul Islam

Il y a quelques problèmes dans votre code mais vous êtes proches, des indicateurs pour les résoudre.

Commencez par éliminer autant de code que possible qui contient toujours le problème. Dans votre cas, supprimez le deuxième widget, moins vous aurez de code, plus il sera facile de trouver le problème.

En d'autres termes, utilisez le SSCCE : http://sscce.org/

Un autre conseil est de créer des identifiants de widget uniques et de préfixer vos fonctions, en utilisant "Primaire" et des noms comme theme_widgets_init n’est pas une bonne idée.

Si vous ne voyez aucun widget disponible sous Apparence dans le menu, si l'élément de menu n'existe pas du tout, c'est parce que vous avez besoin d'au moins une barre latérale active utilisant register_sidebar.

Vous avez besoin d'au moins un de ceux-ci:

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

Pour le problème de votre widget actuel, vous imbriquez une fonction dans une autre fonction, le rappel d'affichage doit être en dehors de la fonction.

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

Pour un deuxième widget, vous feriez la même chose, mais bien sûr avec des fonctions de rappel et des identifiants/noms différents.

Il est très important de noter que les fonctions ci-dessus sont plutôt inutiles car le widget ne peut être utilisé qu'une seule fois dans exactement 1 des barres latérales.

Vous voulez vraiment étendre la classe WP_Widget:
http://codex.wordpress.org/Function_Reference/register_widget

2
Wyck