При проверке ввода отображается сообщение об ошибке, которое должно отображаться только в операторе if.

Я собираю страницу параметров темы WordPress. Я пытаюсь выяснить, проходит ли проверка URL-адрес, введенный в текстовое поле. Если это не так, я хочу отобразить сообщение в верхней части страницы администратора, чтобы исправить введенное.

В этом случае я хочу отображать Тип файла должен иметь расширение файла .jpg, .jpeg, .gif или .png в верхней части страницы, когда пользователь вводит файл с любым другим расширением. Это сообщение находится внутри оператора if, но оно отображается независимо от того, что вводится в поле. Я хотел бы знать, какую ошибку я здесь делаю, или если ввод даже проверяется.

Вот код инициализации страницы параметров

add_action('admin_init', 'theme_admin_init');

function theme_admin_init() {
    register_setting(
        'coolorange_theme_options',
        'coolorange_options',
        'coolorange_options_validate'
    );
    // what each parameter represents:
    // add_settings_field($id, $title, $callback, $page, $section, $args);
    add_settings_section(
        'coolorange_logo_main',
        'Logo Section Settings',
        'logo_section_text',
        'coolorange'
    );
    add_settings_field(
        'upload_image_button',
        '<strong>Upload logo to the Media Folder</strong>',
        'file_upload_button',
        'coolorange',
        'coolorange_logo_main'
    ); // Upload Logo button
    add_settings_field(
        'logo_textfields',
        '<strong>Logo location</strong>',
        'file_location',
        'coolorange',
        'coolorange_logo_main'
    ); // logo url, width and height text fields
    add_settings_field(
        'restore_selectbox',
        '<strong>Restore original heading</strong>',
        'restore_dropdown',
        'coolorange',
        'coolorange_logo_main'
    );
}

Вот код поля ввода (это внутри функции file_location()):

<strong>File URL:</strong> <input id="image_url" type="text" value="<?php $options['image_url']; ?>" size="60" name="coolorange_options[image_url]" />

И это код проверки:

//Validation
function coolorange_options_validate($input) {
    $options = get_option('coolorange_theme_options');
    //check filetypes for image url
    $options['image_url'] = trim($input['image_url']);
    if ( !preg_match ( '/\.(gif|jpg|jpeg|png)$/', $options['image_url'] ) ) { //opens if statement
        $options['image_url'] = ''; 
        echo '<div id="message" style="color: red;"><p>File type must have the file extension .jpg, .jpeg, .gif or .png</p></div>';
    } // closes if statement
    else {

    }
    return $options;
}

add_action('admin_notices', 'coolorange_options_validate'); 
//shows validation errors at the top of the page

person Jason G.    schedule 05.06.2011    source источник
comment
Каков пример вывода $options['image_url']? Кроме того, выполняется ли оператор else?   -  person Wesley Murch    schedule 05.06.2011
comment
Поскольку я новичок в php, я не знаю, как ответить на этот вопрос, но примерный вывод будет URL-адресом с расширением файла только .jpg, .gif или .png. Что касается оператора else, я пытался заставить функцию ничего не делать и оставить ввод как есть. Но оператор else, вероятно, здесь неуместен.   -  person Jason G.    schedule 05.06.2011


Ответы (1)


Похоже, проблема в имени html в следующей строке

<strong>File URL:</strong> <input id="image_url" type="text" value="<?php $options['image_url']; ?>" size="60" name="coolorange_options[image_url]" />

Это должно быть похоже на следующее

<strong>File URL:</strong> <input id="image_url" type="text" value="<?php $options['image_url']; ?>" size="60" name="coolorange_theme_options[image_url]" />

Как вы ожидаете $options = get_option('coolorange_theme_options');.

person Tapos    schedule 05.06.2011
comment
Я попытался изменить функцию register_setting, чтобы группа и имя параметров были такими же, как это: register_setting('coolorange_theme_options', 'coolorange_theme_options', 'coolorange_options_validate'); и изменил имя под каждым входом на coolorange_theme_options[name_of_input], но проблема все еще сохраняется. Это сообщение отображается в верхней части каждой страницы в панели администратора. - person Jason G.; 05.06.2011
comment
Не могли бы вы проверить, что $options содержит функция coolorange_options_validate? Используйте var_dump($options);. Я предполагаю, что $options['image_url'] всегда null, и именно поэтому вы постоянно получаете сообщение. - person Tapos; 06.06.2011
comment
Я ввел var_dump($options) вверху функции. Вывод, который показывает, array(4) { ["image_url"]=> string(0) "" ["image_width"]=> string(5) "728px" ["image_height"]=> string(5) "120px" ["select_options"]=> string(7) "default" }. Куда мне идти отсюда, чтобы исправить это? - person Jason G.; 07.06.2011
comment
Итак, похоже, что from html image_url отправляет пустую строку. Итак, каждый раз, когда вы получаете сообщение. Убедитесь, что на странице просмотра (html) вы получаете правильное значение. - person Tapos; 07.06.2011
comment
После ввода URL-адреса в поле ввода image_url и нажатия кнопки «Сохранить изменения» код показывает: <style type="text/css"><!-- #logo { background: url('http://apache.localhost/wordpress/wp-content/uploads/2011/05/jgs_wordpress_themes_logo012.png') top center no-repeat; ...rest of stylesheet. Но var_dump($options) по-прежнему показывает пустую строку для image_url. - person Jason G.; 10.06.2011