5

プラグイン用のカスタム ウィジェットを作成しようとしており、コーデックスに従っています。

これは私がこれまでに持っているものです。それは機能しており、保存されたオプション値を保存して表示します。

<?php
/**
 * Plugin Name: Sample Widget
 */

$colors = array('red', 'blue', 'yellow');
update_option('sample_widget', $colors);

add_action( 'widgets_init', create_function( '', 'register_widget( "Sample_Widget" );' ) );
class Sample_Widget extends WP_Widget {

    public function __construct() {
        parent::__construct(
            'foo_widget', 
            'Sample Widget', 
            array( 'description' => __( 'This is a description of the sample widget', 'text_domain' ), ) // Args
        );
    }

    public function widget( $args, $instance ) {
        extract( $args );
        $title = apply_filters( 'widget_title', $instance['title'] );
        $color = apply_filters( 'widget_title', $instance['color'] );

        echo $before_widget;
        if ( ! empty( $title ) )
            echo $before_title . $title . $after_title;
        echo 'the selected color is ' . $color . '<br />';
        echo $after_widget;
    }

    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance['title'] = strip_tags( $new_instance['title'] );
        $instance['color'] = $new_instance['color'];
        return $instance;
    }

    public function form( $instance ) {
        if ( isset( $instance[ 'title' ] ) ) {
            $title = $instance[ 'title' ];
        }
        else {
            $title = __( 'New title', 'text_domain' );
        }
        if ( isset( $instance[ 'color' ] ) ) {
            $selected_color = $instance[ 'color' ];
        }
        $colors = get_option('sample_widget');
        ?>
        <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>
        <p>
            <select name="<?php echo $this->get_field_name( 'color' ); ?>" id="<?php echo $this->get_field_id( 'color' ); ?>">
                <option value="">Select...</option>
                <?php foreach($colors as $color) echo '<option value="' . esc_attr( $color ) . '" ' . ($color == $selected_color ? 'selected="Selected"' : '') .  '>'. $color .'</option>'; ?>
            </select>
        </p>
        <?php 
    }
} 

2 つの質問があります。

  1. id="<?php echo $this->get_field_id( 'color' ); ?>"のためですか?行のこの部分を削除したところ、問題なく動作しているようです。コーデックスの作業コードをコピーするだけに配置しました。
  2. コンストラクターでは、最初のパラメーターparent::__construct()はベース ID です。これは任意の文字列値でしょうか? から別のものに変更しましたがfoo_widget、うまくいくようです。

情報をありがとう。

4

1 に答える 1

4
  1. これid="<?php echo $this->get_field_id( 'color' ); ?>"は、このオプションの一意の「id」値を生成することです。通常、これは JS を介してオブジェクトを操作できるようにするためです。

  2. id_baseofは、このfoo_widgetタイプのすべてのウィジェットのルート ID です。小文字のウィジェットのオプションのベース ID です。空のままにすると、ウィジェットのクラス名の一部が使用されます。一意である必要があります。これには、個々のウィジェットの ID 番号が追加されます。foo_widget-001

これがお役に立てば幸いです!

于 2012-09-24T17:17:45.063 に答える