web-dev-qa-db-fra.com

Pourquoi ne puis-je pas voir les "Widgets" dans mon menu Apparence?

J'essaie donc de créer une zone de widgets. Et après avoir ajouté du code au functions.php, j’ai remarqué que je ne pouvais pas voir les "Widgets" dans mon menu. J'ai donc pensé que je devais ajouter "widget support" à mon thème, j'ai donc commencé à chercher cela, mais il semble qu'il existe une fonction pour enregistrer le support (?) Uniquement pour enregistrer un widget-area.

Donc, à ce stade, je ne sais pas pourquoi les "widgets" ne s'affichent pas. La seule possibilité est que quelque chose ne va pas dans ma fonction functions.php/widget.

Voici ce que j'ai dans mon functions.php jusqu'à présent:

// Register widget area

// Function for initialize widget areas
function widget_areas () {

    // Widget area properties/args
    register_sidebar( array(
        'name'      =>      'singlepage_bottom', // Widget Area Name
        'id'      =>      'singlepage_bottom_1', // Widget Area ID
        'before_widget'      =>      '<div>', // Echo before widget area
        'after_widget'      =>      '</div>', // Echo after widget area
        'before_title'      =>      '<h2>', // Echo before widget title
        'after_title'      =>      '</h2>', // Echo after widget title
        ) );
}
add_action( 'widget_init', 'widget_areas' );

// END REGISTER WIDGET AREA

// Create widget

// Create a class that extends WP_Widet
class featured_widget extends WP_Widget {
    // function the defines the widget
    function __construct() {

        parent::__construct(
            // Widget Base ID
            'featured_widget',
            // Widget Name
            __( 'Featured Properties', 'John Doe' ),
            // Widget Option
            array(
                'description'   =>  __( 'Displays a carousel of featured properties.', 'John Doe' )
                )

            );
    }

    // Form function for the widget admin forms
    function form( $instance ) {
    }

    // Function to ensure WordPress updates user inputs
    function update( $new_instance, $old_instance ) {
    }

    // Function for the widget front-end
    function widget( $args, $instance ) {
    }
}

/* END WDIGETS */

Si quelqu'un peut me diriger dans la bonne direction pour ce que j'ai mal fait. Ou ce que je dois faire, je serai reconnaissant.

1
Alex

Il y a 2 problèmes ici (et un troisième problème non lié)

Problème 1

Vous appelez register_widgetArea, une fonction qui n'existe pas. Au lieu de cela, vous souhaitez enregistrer une barre latérale. Si aucune barre latérale n'est enregistrée, le menu des widgets n'apparaît pas dans la zone d'administration. Utilisez plutôt register_sidebar pour enregistrer votre barre latérale.

Je m'attendrais à ce que l'appel de register_widgetArea génère une erreur fatale en PHP, mais cela ne se produit pas à cause du problème 2

Problème 2

Les barres latérales doivent être enregistrées dans l'action widgets_init, mais vous avez utilisé l'action widget_init, qui n'est jamais appelée. C'est pourquoi votre code n'a pas généré d'erreurs fatales, car la fonction n'est jamais appelée.

Problème 3

Vous avez créé un nouveau widget, mais il ne suffit pas de définir une classe héritant de WP_Widget, elle doit également être enregistrée. Un mot d'avertissement, de nombreux exemples tentent d'utiliser create_function lors de l'enregistrement d'un widget pour raccourcir le code. Ceci est mauvais, et équivaut à utiliser eval, et encourage les mauvaises pratiques. Déclarez plutôt une fonction de manière normale et utilisez son nom.

Je vous recommanderais également soit d'utiliser PHP espaces de noms, soit d'ajouter des préfixes à vos fonctions et classes. Les noms génériques peuvent entrer en conflit lorsque d'autres développeurs utilisent les mêmes noms. Assurez-vous que cela ne se produise pas en préfixant vos noms, par exemple. jg_widget_areas ou jg_featured_widget

1
Tom J Nowell