web-dev-qa-db-ja.com

WordPressのウィジット/プラグイン....私のウィジットに表示されないフィールド

私の最初のプラグインを作成しようとしています。簡単なものです。それは主に私がやりたいことをしているのですが、外観 - >ウィジェットのウィジェット自体が自分のフィールドを表示しません。私の分野を現すために誰かが私を正しい方向に向けることができるかどうか疑問に思いますか?

function form($instance) {
    $title = esc_attr($instance['title']); ?>
    <p><label for="<?php echo $this->get_field_id('title'); ?>">
    <?php _e('Title:'); ?>     
    <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" 
    name="<?php echo $this->get_field_name('title'); ?>" type="text" 
    value="<?php echo $title; ?>" /></label></p>
<?php } }
2
Adam Bell

あなたのコードがOPで与えられているので、どこに問題があるのか​​を正確に伝えることは困難です。私ができることについての一つの注意、あなたは決してcreate_function()を使うべきではありません、それはハッカーによって悪用されることができるセキュリティスレッドです。あなたはそれを完全に使わないでください。代わりにPHP 5.3で導入された適切な クロージャー を利用してください。

あなたを助けるために、これはあなたが一緒にウィジェットを構築するために使用できる基本的なスケルトンです。一言で言えば、これはPHP 5.4を必要とします。これは、 新しい短い配列構文([])を使用するためです

class Custom_Services extends WP_Widget 
{

    public function __construct() 
    {
        parent::__construct(
            'widget_custom_service', 
            _x( 'Custom Service Widget', 'Custom Service Widget' ), 
            [ 'description' => __( 'Displays information from a custom service.' ) ] 
        );
        $this->alt_option_name = 'widget_custom_service';

        add_action( 'save_post', [$this, 'flush_widget_cache'] );
        add_action( 'deleted_post', [$this, 'flush_widget_cache'] );
        add_action( 'switch_theme', [$this, 'flush_widget_cache'] );
    }

    public function widget( $args, $instance ) 
    {
        $cache = [];
        if ( ! $this->is_preview() ) {
            $cache = wp_cache_get( 'widget_services', 'widget' );
        }

        if ( ! is_array( $cache ) ) {
            $cache = [];
        }

        if ( ! isset( $args['widget_id'] ) ) {
            $args['widget_id'] = $this->id;
        }

        if ( isset( $cache[ $args['widget_id'] ] ) ) {
            echo $cache[ $args['widget_id'] ];
            return;
        }

        ob_start();

        $title          = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Category Posts' );
        /** This filter is documented in wp-includes/default-widgets.php */
        $title          = apply_filters( 'widget_title', $title, $instance, $this->id_base );

        // ADD YOUR CUSTOM PHP CODE HERE FOR EXECUTION TO DISPLAY ON FRONT END

        echo $args['after_widget']; 

        if ( ! $this->is_preview() ) {
            $cache[ $args['widget_id'] ] = ob_get_flush();
            wp_cache_set( 'widget_services', $cache, 'widget' );
        } else {
            ob_end_flush();
        }
    }

    public function update( $new_instance, $old_instance ) 
    {
        $instance                   = $old_instance;
        $instance['title']          = strip_tags( $new_instance['title'] );
        $this->flush_widget_cache();

        $alloptions = wp_cache_get( 'alloptions', 'options' );
        if ( isset($alloptions['widget_custom_service']) )
            delete_option('widget_custom_service');

        return $instance;
    }

    public function flush_widget_cache() 
    {
        wp_cache_delete('widget_services', 'widget');
    }

    public function form( $instance ) 
    {

        $title      = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : '';
        ?>

        <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 $title; ?>" />
        </p>

    <?php
    }

}

add_action( 'widgets_init', function () 
{
    register_widget( 'Custom_Services' );
});
2
Pieter Goosen