在使用WordPress submit_button()提交之前运行PHP函数

时间:2014-05-09 12:22:20

标签: php wordpress

我在WordPress管理界面中创建了一个选项页面。如何在提交之前运行PHP函数?

我的HTML:

<div class="wrap">
<h2>Author</h2>
<form method="post" action="options.php">
    <?php settings_fields('author_option_group'); ?>
    <h4>Author Settings</h4>
    <label for="author">Author: </label>
    <input type="text" id="author" name="author" value="<?php echo get_option('author'); ?>" />
    <?php submit_button(); ?>
</form>

上面的submit_button()是一个wordpress函数,它生成一个提交按钮,将输入字段保存到数据库中的wp选项表。我想在运行提交之前运行一个函数。该函数将执行一些自定义验证等,如果满足某些条件,可能会抛出错误而不运行提交。

无论该功能将执行什么操作,我如何提供要运行的功能,以确定提交是否会通过?

2 个答案:

答案 0 :(得分:3)

如果你想在客户端验证表单,那么你必须使用javascript,如果你正在使用jquery 它会是这样的。

$(document).ready(function(){
    $('form').on('submit',function(){
     // validation
     // if everything is ok return true else return false and show errors

    });
})

如果要在服务器端进行验证,则必须在显示表单之前运行验证。 您可以使用wp hook,您可以在options.php中查看验证,也可以在functions.php中查看验证。有钩子就会看起来像。

<?php do_action('before_form_rendered') ?>
<form method="post" action="options.php">
    <?php settings_fields('author_option_group'); ?>
    <h4>Author Settings</h4>
    <label for="author">Author: </label>
    <input type="text" id="author" name="author" value="<?php echo get_option('author'); ?>" />
    <?php submit_button(); ?>
</form>

并在functions.php

中添加此代码
add_action('before_form_rendered','validate_author_form');
function validate_author_form(){
    if(isset($_POST['author']) && !empty($_POST['author'])){
       echo 'form has been submited';
    }else{
       echo 'please insert author name';
    }
}

您也可以通过ajax实现您的表单。

JS方面

$('form').on('submit', function(){
   $.post('http://yoursite/wp-admin/admin-ajax.php', {
           action: 'custom_form', 
           data : $(this).serializeArray()
           },function(response){
            // handle server response here
            console.log(response);
           });
   return false;
});

php代码添加到您的functions.php

add_action( 'wp_ajax_custom_form', 'custom_form_handler' );
add_action( 'wp_ajax_nopriv_custom_form', 'custom_form_handler' );

// validation goes here
function custom_form_handler(){
    echo "<pre>";
    var_dump($_POST);
    echo "</pre>";
    exit;

}

最诚挚的问候, 吊架。

答案 1 :(得分:1)

我认为2种方式可以帮助你。 1.更改输入类型“提交” 文件是 wp-admin \ includes \ template.php(unction get_submit_button) 2.use preventDefault

    onsubmit{
    //docheck
    if(checked){
        //nothing do
    }else{
        alert(wrong);
        e.preventDefault
    }
}

但是阻止默认IE不支持