web-dev-qa-db-ja.com

Sanitize関数でinput_attrsを取得する方法

Sanitize関数でinput_attrsを取得しようとすると、いつも以下のようなエラーが出ます。
で非オブジェクトのプロパティを取得しようとしています...

どうやってするの ?
前もって感謝します。

制御クラス

class MY_Customize_Number_Control extends WP_Customize_Control {

    public $type = 'number';

    /**
     * Render the control in the customizer
     *
     * @since 1.0
     */
    public function render_content() {
        $input_id = '_customize-input-' . $this->id;
        $description_id = '_customize-description-' . $this->id;
        ?>
        <?php if ( ! empty( $this->label ) ) : ?>
            <label for="<?php echo esc_attr( $input_id ); ?>" class="customize-control-title"><?php echo esc_html( $this->label ); ?></label>
        <?php endif; ?>
        <?php if ( ! empty( $this->description ) ) : ?>
            <span id="<?php echo esc_attr( $description_id ); ?>" class="description customize-control-description"><?php echo $this->description; ?></span>
        <?php endif; ?>

        <input type="number" id="<?php echo esc_attr( $input_id ); ?>" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->input_attrs(); ?> <?php $this->link(); ?>>
        <?php
    }

}

サニタイズ:

function my_sanitize_number( $input, $setting ) {
    $input_attrs = $setting->manager->get_control( $setting->id )->input_attrs;
    $min = $input_attrs['min'] ? $input_attrs['min'] : '';
    $max = $input_attrs['max'] ? $input_attrs['max'] : '';

    if ( isset( $input ) && is_numeric( $input ) ) {
        if( is_array( $input_attrs ) ) {
            if ( isset( $min ) && is_numeric( $min ) ) {
                if ( $input < $min ) {
                    $input = $min;
                }
            }
            if ( isset( $max ) && is_numeric( $max ) ) {
                if ( $input > $max ) {
                    $input = $max;
                }
            }
        }
        return $input;
    } else {
        return $setting->default;
    }
}

コントロール:

$wp_customize->add_setting(
    'my_custom_num', array(
        'default'           => 5,
        'sanitize_callback' => 'my_sanitize_number',
        'transport'         => 'refresh'
    )
);
$wp_customize->add_control(
    new MY_Customize_Number_Control(
        $wp_customize,
        'custom_num',
        array(
            'settings'    => 'my_custom_num',
            'priority'    => 6,
            'section'     => 'my_section',
            'label'       => esc_html__( 'Number of post to display', 'mytheme' ),
            'description' => esc_html__( 'Choose how many posts to display', 'mytheme' ),
            'type'        => 'number',
            'input_attrs' => array(
                'min' => 0,
                'max' => 20
            )
        )
    )
);
1
Michael

コントロールの名前はcustom_numですが、設定の名前はmy_custom_numです。前者を使用するように設定のsanitize関数を変更します。

$input_attrs = $setting->manager->get_control( 'custom_num' )->input_attrs;

入力有効性制約のカスタマイズ プラグインも参照してください。ここでは、 与えられた設定のためのコントロールを入手する方法 を参照することができます。それを-code:

$controls = array();
foreach ( $setting->manager->controls() as $control ) {
    if ( in_array( $setting, $other_control->settings, true ) ) {
        $controls[] = $control;
    }
}
if ( empty( $controls ) ) {
    return;
}

$controlnullではない場合、それはこの$settingに関連付けられています。ただし、設定がどのコントロールにも関連付けられていない場合や、複数の設定に関連付けられている場合があるため、これらの場合を考慮する必要があります。

0
Weston Ruter