主题激活后一次弹出

时间:2014-09-11 作者:jammypeach

我已经编写了一个自定义主题,它在激活后会执行一些一次性的设置杂务,这是我每次在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\');
如何使用对话框询问用户是否执行这些设置任务?

2 个回复
最合适的回答,由SO网友:jammypeach 整理而成

在深入研究了抄本和黑客攻击之后,我想出了如何做到这一点。

Short answer - 使用thickbox(http://codex.wordpress.org/ThickBox).

Longer answer....

钩住after_setup_theme 不适合将任何内容插入管理页面,因为当该主题处于活动状态时,它会在每个页面加载上运行。根据凯撒的建议,我们可以使用after_switch_theme 相反

钩子in_admin_header 将允许我们在管理页面的主体中加入一些HTML,我们可以使用它来填充一个模式框,并使用wordpress附带的thickbox来显示它。

下面是一个简单的示例,在切换到“我的主题”后的页面加载中,会向用户显示一个模式框,其中可以包含一个链接或常规表单,允许我们执行这些设置操作,但只有在用户决定这样做的情况下。真正的表单包括“不再显示此内容”选项。

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 确保它只运行一次,并且用户可以选择如何使用模式框继续操作,这两个要求都得到了满足。

SO网友:kaiser

我建议您仍然使用插件。这是一项一次性任务,您可以在执行任务时自动停用插件,而不会留下任何东西。如果你切换主题并再次切换到你的主题,你甚至可以激活插件。

你可能想看看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(). 只有在未删除旧主题的情况下,才会显示该主题。

结束

相关推荐