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


Я написал пользовательскую тему, которая выполняет некоторые разовые задачи по настройке после активации - то, что мне нужно делать каждый раз, когда я использую ее в новой копии wordpress, например, создание навигационного меню и настройка параметров обсуждения.

Я автоматизировал эти вещи в своей теме, а не в плагине, потому что они напрямую связаны с темой и имели бы ограниченное применение в других местах.

В любом случае, что я хотел бы сделать, так это после того, как моя тема будет активирована в первый раз время, покажите всплывающее окно, которое предоставит пользователю выбор, выполнять эти действия или нет. Код для их выполнения уже работает и написан, но у меня нет механизма, позволяющего пользователю запускать их - мой единственный реальный вариант здесь - запустить их автоматически, подключившись к after_setup_theme.

Я выяснил, как определить, является ли это активацией в первый раз, используя update_option для хранения логического значения, которое я затем проверяю - вот что у меня есть:

function jp_theme_setup()
{
    $installed = get_option('jp_installed');
    if (!$installed)
    {
        update_option('jp_installed', true);
        //set up my theme, do stuff involving things

        //how can I ask the user whether or not to do certain actions?
    }
}
add_action('after_setup_theme', 'jp_theme_setup');

Как я могу использовать диалоговое окно, чтобы спросить пользователь должен или не должен выполнять эти задачи настройки?

Author: jammypeach, 2014-09-11

2 answers

Покопавшись в кодексе и покопавшись, я понял, как это сделать.

Короткий ответ - используйте толстый ящик (http://codex.wordpress.org/ThickBox).

Более длинный ответ....

Подключение к after_setup_theme не идеально подходит для вставки какого-либо контента на страницу администратора, так как он запускается при каждой загрузке страницы, когда эта тема активна. Как предложил кайзер, вместо этого мы можем использовать after_switch_theme.

Крючок in_admin_header позволит нам добавить немного HTML в тело страницы администратора, которую мы можем использовать для заполнения модального поля и отображения его с помощью thickbox, который поставляется с wordpress.

Ниже приведен простой пример, где при загрузке страницы после переключения на мою тему пользователю предоставляется модальное поле, которое может содержать ссылку или обычную форму, которая позволит нам выполнить эти действия по настройке, но только если пользователь решит. Реальная форма включает опцию "Не показывать это снова".

function jp_modal()
{
    //inject a script that opens a thickox which contains the content of #install
    ?>
        <script>
            jQuery(window).load(function($) {
                tb_show("jp theme install","#TB_inline?width=600&height=800&inlineId=install", null);
            });
        </script>
        <div id='install'><div>My Install Options!</div></div>
    <?php
}
function jp_theme_setup()
    {
        //test for the theme being installed before. 
        //This stops us running the code more than once.

        $installed = get_option('jp_installed');
        if (!$installed)
        {
            //mark the theme as installed, and show the modal box
            update_option('jp_installed', true);
            add_action('in_admin_header', 'jp_modal');
        }
    }
    add_action('after_switch_theme', 'jp_theme_setup');

Обратите внимание, что я удалил код, чтобы показать только соответствующие части, поэтому он не был протестирован в этой сокращенной форме.

Опция jp_installed в сочетании с запуском только моего кода установки на after_switch_theme гарантирует, что он будет запущен только один раз, и пользователю предоставляется выбор того, как действовать, используя модальное поле - два требования выполнены.

 2
Author: jammypeach, 2014-09-12 16:32:51

Я бы посоветовал вам по-прежнему использовать плагин. Это одноразовая задача, и вы можете автоматически деактивировать плагин при выполнении задачи, ничего не оставляя после себя. Вы даже можете активировать плагин, если переключите темы и снова вернетесь к своим.

Возможно, вы захотите взглянуть на check_theme_switched(). Затем есть опция get_option( 'theme_switched' ), которая проверяется ранее упомянутой функцией. И, наконец, есть действие, которое имеет stylesheet в качестве аргумента

add_action( 'after_switch_theme', function( $stylesheet, $old_theme_obj = null )
{
    // here goes the funk
}, 10, 2 );

Второй аргумент является необязательным, и экземпляр WP_Theme, тот же объект, который вы обычно извлекаете с помощью wp_get_theme(). Он присутствует только в том случае, если вы не удалили старую тему.

 1
Author: kaiser, 2014-09-11 17:48:28