jiewmeng
  • 0
Учитель

Параметры экземпляра виджета отображаются неправильно

  • 0

у меня такая установка

function form($instance) {
    $defaults = array(
        'title' => 'Recent Products',
        'number_products' => 3
    );
    $instance = wp_parse_args($instance, $defaults);

но мой заголовок в порядке, но number_products всегда не отображается. я отлаживал в netbeans и обнаружил, что form() запускается 2 раза и 1 раз, переменные выглядят так

$instance = array(0)
// after wp_parse_args, 
$instance = array('title' => 'Recent Products', 'number_products' => 3);

при 2-м запуске wp_parse_args, я не знаю, почему он запускается 2-й раз,

$instance = array('title' => 'Recent Products', 'number_products' => null);
// after wp_parse_args
$instance = array('title' => 'Recent Products', 'number_products' => null);

я действительно не знаю, что происходит… может кто-нибудь просветить меня?

Share
  1. я наконец нашел ответ, на самом деле это не проблема с кодом, который я разместил. это в update() функции. у меня есть код подтверждения

    function update($new_instance, $old_instance) {
        $instance['title'] = esc_attr(strip_tags($new_instance['title']));
        if (is_int($new_instance['number_products'])) {
            if ($new_instance['number_products'] > 0)
                $instance['number_products'] = $new_instance['number_products'];
            else
                $instance['number_products'] = 1;
        } else {
            $instance['number_products'] = $old_instance['number_product'];
        }
    
        return $instance;
    }
    

    проблема в 2-х местах. я должен использовать is_numeric over is_int , причина в том,

    Чтобы проверить, является ли переменная числом или числовой строкой (например, ввод формы, который всегда является строкой), вы должны использовать is_numeric().

    то в другом $old_instance['number_product'] должно быть множественное число$old_instance['number_products']

    • 0
  2. Я тоже не уверен в двух прогонах. Вы пытались просто сбрасывать содержимое внутри функции вместо отладки? Что-то вроде этого:

    function form( $instance ) {
    
        var_dump( $instance );
    
        $defaults = array(
            'title' => 'Recent Products',
            'number_products' => 3
        );
        $instance = wp_parse_args($instance, $defaults);
    
        var_dump( $instance );
    
    • 0

Оставить ответ

You must login to add an answer.