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

时间:2014-01-30 13:03:08

标签: php wordpress wordpress-plugin

我在wordpress admin中创建了一个自定义页面,其中包含一个简单的文件上传字段和一个提交按钮。我需要弄清楚如何将页面提交到可以处理但无法在网络上找到任何内容的地方。有没有人知道表单上需要的'动作'才能让它转到我可以处理文件的函数或其他页面?

4 个答案:

答案 0 :(得分: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
} 

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

我不得不改变这样的代码:

add_action( 'admin_post_wpse10500', 'wpse10500_admin_action' );

答案 3 :(得分:-3)

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

  

有谁知道&#39;行动&#39;需要在表单上才能使它转到函数...

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

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设置为&#34;更新&#34;,尽管在我的代码中我使用其他基于形式回应的上下文。

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

相关问题