在wordpress中的自定义管理页面上提交表单

问题描述 投票:8回答:4

我在wordpress管理员中创建了一个自定义页面,它有一个简单的文件上传字段和一个提交按钮。我需要弄清楚如何将页面提交到可以处理但无法在网络上找到任何内容的地方。有谁知道表单上的“动作”是什么让它去一个函数或我可以处理文件的另一个页面?

php wordpress wordpress-plugin
4个回答
16
投票

使用此代码段:

add_action( 'admin_action_wpse10500', 'wpse10500_admin_action' );
function wpse10500_admin_action()
{
    // Do your stuff here
    wp_redirect( $_SERVER['HTTP_REFERER'] );
    exit();
}
add_action( 'admin_menu', 'wpse10500_admin_menu' );
function wpse10500_admin_menu()
{
    add_management_page( 'WPSE 10500 Test page', 'WPSE 10500 Test page', 'administrator', 'wpse10500', 'wpse10500_do_page' );
}
function wpse10500_do_page()
{
?>
    <form method="POST" action="<?php echo admin_url( 'admin.php' ); ?>">
        <input type="hidden" name="action" value="wpse10500" />
        <input type="submit" value="Do it!" />
    </form>
<?php
} 

2
投票

谢谢亨特先生。无法归功于你的正确答案。

将表单包装在if(isset($ _ POST ['submit']))中,然后调用我的函数。


0
投票

我不得不改变这样的代码来工作:

add_action( 'admin_post_wpse10500', 'wpse10500_admin_action' );

-3
投票

我正在使用与获得结果的公认答案不同的方式回答OP问题的这一特定部分:

有没有人知道表单上的'动作'需要什么才能让它去一个函数...

发布到同一页面 - 通过空白表单操作 - 可以基于相同的单个表单采取不同的操作。

if ( isset($_POST['custom_action']) ){
    if ( $_POST['custom_action'] == 'update'){
        if ( isset($_POST['Submit']) ) {
            //form validation and gather into a single object $valid;
            //I put this in a class, so self::update_main_config($valid);
            //otherwise you can just update_main_config($valid)
        }
        if ( isset($_POST['Submit_Default']) ) {
            //no form validation needed & defaults handled via custom wp_option, this could also be static function very easily
            //secondary action group such as self::restore_config_defaults();
        }
    }
}

基于我用于其中一个插件的自定义管理页面,我有条件地设置了我期望发生的上下文。我的管理员配置页面提交了新值,它可以恢复默认值...但它也可以根据用户输入影响其他模块。我将展示如何使用相当简单的条件来创建更复杂的提交上下文。如果上传是照片,并且管理员需要控制以发布到任意用户个人资料,但我们想重复使用相同的代码以允许登录用户发布他们自己的个人资料照片,该怎么办?这就是上下文的原因,这就是为什么我认为我的方法论是相关的。

我喜欢重用代码并利用单个功能循环来处理任何单个上下文 - 再次,使用单个隐藏表单输入,或者可能基于用户或管理事件的多个控件,可以改变上下文使用相同的形式和理论上1个或多个提交按钮。我实际上想要2个按钮来分隔提交者心中的动作,所以我已经展示了这种方法。

这是相应的HTML

<form name="config_actions" action="" method="post">
<input type="hidden" id="custom_action" name="custom_action" value="update" />
<input type="submit" id="my_main_action" name="Submit" value="Update" />
<input type="submit" id="my_secondary_action" name="Submit_Default" value="Restore Defaults" />
</form>

使用简单的javascript有条件地将输入#custic_action设置为适合创建我的上下文的值 - 为了这个例子,它验证了custom_action设置为“update”的时间,尽管在我的代码中我也根据表单响应使用其他上下文。

我之前的例子获得-2(!)我使用$ _POST ['action']这意味着输入[name =“action”]不要与我以前的代码隐含的形式[action =“”]混淆 - 所以是的,那是坏。在这里,我更清楚地表明我有一个名为'custom_action'的隐藏输入上下文管理器,我有2个名为'Submit'和'Submit_Default'的提交按钮,它们都有效地触发相同的表单,因为它们都是type = submit。

© www.soinside.com 2019 - 2024. All rights reserved.