我在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选项表。我想在运行提交之前运行一个函数。该函数将执行一些自定义验证等,如果满足某些条件,可能会抛出错误而不运行提交。
无论该功能将执行什么操作,我如何提供要运行的功能,以确定提交是否会通过?
答案 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不支持