web-dev-qa-db-fra.com

Création d'un widget personnalisé PHP Exception lorsqu'elle est placée dans son propre PHP Fichier

J'ai créé un plugin personnalisé et j'ai créé un widget. Pour le moment, ce code est inclus dans le fichier php de base du plugin et fonctionne parfaitement. Je veux déplacer le widget et tous les futurs dans un fichier widgets.php et les inclure dans le fichier de plugin principal. Quand je fais cela, j'obtiens l'erreur php suivante.

Erreur irrécupérable PHP: appel de la fonction non définie wp_get_current_user () dans /var/www/wordpresstest/wp-includes/capabilities.php à la ligne 1387

Ceci est le code pour le widget. Ce code fonctionne parfaitement lorsque je le place dans le fichier php du plugin principal, mais lorsque j’utilise nécessite "widgets.php", j’obtiens l’erreur.

<?php 
class nb_game_info_widget extends WP_Widget 
{
    function __construct() 
    {
        parent::__construct('nb_game_info_widget', __('Test Widget', 'nb_game_info_widget_domain'), array( 'description' => __( 'Game IDS Widget', 'nb_game_info_widget_domain' )));
    }

    public function widget( $args, $instance ) 
    {
        if(is_single())
        {
            $title = apply_filters( 'widget_title', $instance['title'] );
            echo $args['before_widget'];
            if ( ! empty( $title ) )
            echo $args['before_title'] . $title . $args['after_title'];

            global $post;
            $postid = $post->ID;

            $gameids = get_post_meta( $postid, 'nb_gameids_key', true );
            $platformids = get_post_meta( $postid, 'nb_platformids_key', true );
            echo "GAME IDS ! = ". $gameids;

            //required for the theme to do whatever it does
            echo $args['after_widget'];
        }
    }

    // Widget Backend 
    public function form( $instance ) {
        if ( isset( $instance[ 'title' ] ) ) 
        {
            $title = $instance[ 'title' ];
        }
        else {
            $title = __( 'New title', 'nb_game_info_widget_domain' );
        }
        // Widget admin form
        ?>
        <p>
        <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> 
        <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
        </p>
        <?php 
    }

    // Updating widget replacing old instances with new
    public function update( $new_instance, $old_instance ) 
    {
        $instance = array();
        $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
        return $instance;
    }
} // Class nb_game_info_widget ends here

// Register and load the widget
function nb_loag_gameinfo_widget() {
    register_widget( 'nb_game_info_widget' );
}
add_action( 'widgets_init', 'nb_loag_gameinfo_widget' );
1
Dan Hastings

Je ne sais pas pourquoi cela devrait résoudre le problème, mais je peux le résoudre. Utilisez un nom de fichier différent. Par exemple: include('my_widgets.php');

Je reçois l'erreur que vous décrivez avec include('widgets.php'); mais pas avec un nom de fichier différent. Je ne sais pas pourquoi. Je sais que WordPress a un fichier Core nommé widgets.php, mais je ne comprends pas pourquoi il devrait y avoir un conflit. Cela doit avoir à voir avec la façon dont include fouille dans les fichiers, mais il faudrait que je fasse des recherches - mettre sous le capot, pour ainsi dire. Morale de l'histoire: n'utilisez pas de noms de fichiers génériques :)

2
s_ha_dum