WordPress + Multisite: как добавить пользовательские параметры блога для добавления новой формы сайта в Network Admin? - программирование
Подтвердить что ты не робот

WordPress + Multisite: как добавить пользовательские параметры блога для добавления новой формы сайта в Network Admin?

В многопользовательской установке WordPress я настраиваю, мне нужно добавить простое текстовое поле в форму ввода для создания новых сайтов блога, которая находится в

Network Admin > Sites > Add New

Естественно, мне нужно, чтобы это поле сохранялось вместе с другими метаданными из этой формы в таблице {new_blog_prefix}_options.

Меня особенно интересует самый простой, самый простой и/или "правильный путь" (т.е. способ WordPress), чтобы достичь этого, но я соглашусь на The Way That Works & trade;!

До сих пор я сталкивался с множеством тупиков в своих исследованиях:

  • API настроек - [WP Codex]

    Насколько я могу судить, API настройки (a) может не работать для раздела Network Admin (хотя это может быть изменено в последней версии WP); Кроме того, (b) кажется, что это только позволяет добавлять/изменять экраны в разделе Settings панели инструментов.

  • wpmu_options hook - [Крюки DB]

    Кажется, это крючок исключительно для добавления параметров на экран настроек сети.

  • add_site_option/add_blog_option - [WP Codex]

    Ближе всего я могу найти; похоже, позволяет добавлять параметры, специфичные для сайта, в таблицу {blogsite_prefix}_options, но по-прежнему не помогает добавлять параметры в форму администратора.

Итак... нет кубиков. Любая помощь приветствуется!

4b9b3361

Ответ 1

Если вы посмотрите на исходный код на странице "Добавить новый сайт", вы увидите, что WordPress не предоставляет для этого крючка цель. Конечно, можно было бы добавить крючок самостоятельно, но, как правило, плохой практикой является редактирование ядра WordPress.

Однако после подачи и всей информации страница вызывает функцию wpmu_create_blog(). В этой функции есть крючок, а именно действие wpmu_new_blog:

do_action( 'wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta );

На этом этапе блог уже создан. Тем не менее, мы все же можем определить, было ли поле отправлено, подключившись к этому действию и сохранив его в базе данных. Мы добавляем следующее в наш файл (или шаблон) плагина:

function add_new_blog_field($blog_id, $user_id, $domain, $path, $site_id, $meta) {

    // Make sure the user can perform this action and the request came from the correct page.

    switch_to_blog($blog_id);

    // Use a default value here if the field was not submitted.
    $new_field_value = 'default';

    if ( !empty($_POST['blog']['new_field']) )
        $new_field_value = $_POST['blog']['new_field'];

    // save option into the database
    update_option( 'new_field', $new_field_value);

    restore_current_blog();
}

add_action( 'wpmu_new_blog', 'add_new_blog_field' );

Что касается отображения поля на странице, вы можете использовать подход JavaScript. Вы добавляете файл javascript исключительно на страницу "Добавить новый сайт" и на странице "Вниз" страницы, в которую вы вставляете поле, в нужную позицию на странице. Вы должны добавить поле ввода с именем "blog [new_field]". Мы создаем следующий файл JavaScript, который после загрузки добавляет новое поле на страницу "Добавить новый сайт" :

(function($) {
    $(document).ready(function() {
        $('<tr class="form-field form-required"></tr>').append(
            $('<th scope="row">New field</th>')
        ).append(
            $('<td></td>').append(
                $('<input class="regular-text" type="text" title="New Field" name="blog[new_field]">')
            ).append(
                $('<p>Explanation about your new field</p>')
            )
        ).insertAfter('#wpbody-content table tr:eq(2)');
    });
})(jQuery);

Теперь осталось только добавить этот файл на страницу "Добавить новый сайт" , добавив это в свой файл плагина:

// Only add the script for the page site-new.php (the page hook).
add_action( "admin_print_scripts-site-new.php", 'my_admin_scripts' );

function my_admin_scripts() {
    wp_register_script('yourScript', plugins_url('js/yourScript.js', __FILE__));
    wp_enqueue_script('yourScript');
}

Дальнейшее предложение может быть в зависимости от ваших потребностей: добавьте поле ввода на страницу общих настроек, используя add_settings_field, чтобы пользователь может отредактировать его позже (и, возможно, только если это значение по умолчанию для этого поля). "Вы не можете изменить это поле позже".

Надеюсь, это поможет вам.