web-dev-qa-db-fra.com

Comment faire apparaître mon widget personnalisé dans les widgets WordPress? Développement de plugin

Ceci est mon premier plugin WordPress, donc je suis un peu noob. Mais pourquoi mon widget n'apparaît-il pas dans tous les autres widgets de l'interface WP-Admin? Il devrait être visible quand j'active le plugin. Mais ce n'est pas. Toute aide appréciée!

inclut/class-level_system-widgets.php

class Level_system_Widgets extends WP_Widget {

    public function __construct(){
        $widget_ops = array( 
            'classname' => 'my_widget',
            'description' => 'My Widget is awesome',
        );
        parent::__construct( 'my_widget', 'My Widget', $widget_ops );
    }

    public function widget( $args, $instance ) {
        // outputs the content of the widget
    }   

    public function form( $instance ) {
        // outputs the options form on admin
    }

    public function update( $new_instance, $old_instance ) {
        // processes widget options to be saved
    }

    public function init() {
        add_action( 'widgets_init', function(){
            register_widget( 'My_Widget' );
        }); 
    }
}

level_system.php

function activate_level_system() {
    require_once plugin_dir_path( __FILE__ ) . 'includes/class-level_system-widgets.php';
    Level_system_Widgets::init();
}
1
slider2013

Mise à jour ma réponse en fonction de vos commentaires. Tout d'abord

Veuillez lire comment créer un plugin: https://codex.wordpress.org/Writing_a_Plugin

Deuxièmement, créez un dossier et votre fichier dans le répertoire wp-content/plugins. Ajoutez cet exemple de code de plugin ci-dessous.

Ensuite, activez le plug-in à partir du tableau de bord.

ancienne réponse

Lorsque vous enregistrez un widget en tant que plug-in, vous devez utiliser add_action après votre classe. les widgets init se chargent avant votre classe.

add_action('widgets_init', create_function('', 'return register_widget("Level_system_Widgets");'));

Ajoutez ce code après votre classe (code mis à jour avec un exemple de code API WordPress Widgets);

nouvelle réponse

<?php 
/*
Plugin Name: Did you try this widget?
Plugin URI: http://www.wpadami.com/
Description: Did you try this widget?
Version: 1
Author: Serkan Algur
Author URI: http://www.wpadami.com
License: GPL2
*/

class Level_system_Widgets extends WP_Widget {

    public function __construct(){
        $widget_ops = array( 
            'classname' => 'level_system_widget',
            'description' => 'Level System Widget',
        );
        parent::__construct( 'level_system_widget', 'Level System Widget', $widget_ops );
    }

    public function widget( $args, $instance ) {
        echo $args['before_widget'];
        if ( ! empty( $instance['title'] ) ) {
            echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
        }
        echo esc_html__( 'Hello, World!', 'text_domain' );
        echo $args['after_widget'];
    }   

    public function form( $instance ) {
        $title = ! empty( $instance['title'] ) ? $instance['title'] : esc_html__( 'New title', 'text_domain' );
    ?>
    <p>
    <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_attr_e( 'Title:', 'text_domain' ); ?></label> 
    <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
    </p>
    <?php 
    }

    public function update( $new_instance, $old_instance ) {
        $instance = array();
    $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? sanitize_text_field( $new_instance['title'] ) : '';

    return $instance;
    }

}
add_action('widgets_init', create_function('', 'return register_widget("Level_system_Widgets");'));

Working Sample

Ce code fonctionne .

0
Serkan Algur