【问题标题】:How do I perform an action after a user saves an options menu in Wordpress?用户在 Wordpress 中保存选项菜单后如何执行操作?
【发布时间】:2014-09-01 09:13:54
【问题描述】:

我有一个 Wordpress 插件,我在其中添加了一个菜单,允许用户设置各种选项。我使用了此处描述的“add_menu_page”功能 - http://codex.wordpress.org/Function_Reference/add_menu_page。在保存此页面上的选项后,我现在需要执行一些操作,但我不确定我是否可以这样做,或者如果可以,使用什么挂钩。

我无法准确发布用于创建此选项页面的代码,但我会尝试整理类似的内容以传达信息

function my_menu_page() {
    add_menu_page('My Menu', 'My Menu', 'edit_posts', "my_menu_settings", "my_menu_settings");
}

function my_menu_settings() {
    echo "          
        <h1>My Menu Settings</h1>
        <div>
            <form action='options.php' method='post' name='options'>
            " . wp_nonce_field('update-options') . "
                <input type='text' name='my_option_1' value='" . get_option('my_option_1') . "' /><br />
                <input type='hidden' name='action' value='update' />
                <input type='hidden' name='page_options' value='my_option_1' />     
                <input type='submit' name='Submit' value='Update' />
            </form>
        </div>
    ";
}

add_action('admin_menu', 'my_menu_settings');

【问题讨论】:

    标签: php wordpress plugins menu hook


    【解决方案1】:

    我认为您正在寻找类似 update_optionhere is the link to the Wordpress documentation

    之类的东西

    以下是同一个钩子的一些变体: (update_option 也可用于保存/创建新选项)

    update_option_{option_name}:在名称为“option_name”的选项更新后运行。例如,对于名称为“foo”的选项:

    add_action('update_option_foo', 'my_menu_settings', 10, 2);
    

    update_option:在选项更新之前运行。示例:

    add_action('update_option', 'my_menu_settings', 10, 3);
    

    updated_option:在选项更新后运行。示例:

    add_action('updated_option', 'my_menu_settings', 10, 3);
    

    谢谢

    【讨论】:

    • 当实际侧边栏页面更新或 ACF 字段组更新时会触发这些吗?
    • 根据文档“在更新选项值之前立即触发”,因此在更新任何选项值时,包括您提到的值。你可以随时尝试
    • of,否则未更新选项页面。我试过了,但它似乎没有触发。也许我的命名是错误的,而不是 foo 所指的 100%。
    • 'foo' 是一个通用选项名称,假设您创建了一个名为“headerSize”的选项名称,在这种情况下add_action('update_option_headerSize', 'my_menu_settings', 10, 2); 函数 my_menu_settings 将在 headerSize 更新时被触发。您始终可以创建一个终止流程的函数并尝试查看该函数何时被触发。
    【解决方案2】:

    如果有人想在保存之前做一些动作/清理,他可以使用 pre_update_option_foo 钩子

    add_filter( 'pre_update_option_foo', 'myplugin_update_field_foo', 10, 2 );

    查看 Codex 中的详细信息/示例:https://developer.wordpress.org/reference/functions/update_option/

    【讨论】:

      【解决方案3】:

      您可以在页面保存后使用 WordPress 操作挂钩“save_post”添加操作。有关此 WordPress 钩子的更多信息和示例,请阅读 http://codex.wordpress.org/Plugin_API/Action_Reference/save_post

      【讨论】:

      • save_post 钩子适合这个需求吗?我猜最初的问题与保存设置页面(options.php)更相关,而不是在管理员中保存普通帖子或自定义帖子类型。相反,我发现这个响应更适合原始需求:wordpress.stackexchange.com/questions/79898/… using admin_post hook。
      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多