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
)
)
)
);
コントロールの名前は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;
}
$control
がnull
ではない場合、それはこの$setting
に関連付けられています。ただし、設定がどのコントロールにも関連付けられていない場合や、複数の設定に関連付けられている場合があるため、これらの場合を考慮する必要があります。