我在模板中有一个表单,提交后应进行验证,并显示任何错误,如果没有错误,则将数据插入数据库。
我是wordpress的新手,但我的想法是,也许一个“行动”可以解决这个问题。所以我在函数中有一个函数。php:
function signup_validate_insert($errors){
if (isset($_POST[\'submit_msg\'])) {
// validate , insert into database
}
return $errors;
}
我在函数上有“添加操作”。php:
add_action(\'signup_insert\', \'signup_validate_insert\');
表单实际上位于添加到模板页面的模板部分(带有“get\\u template\\u part”)。
在模板部分,我添加了以下操作:
<?php do_action(\'signup_insert\', $errors); ?>
表单在提交时发送到同一页。
有一个用于显示错误的div:
<div class="errors">
<?php if((isset($errors))){
foreach($errors as $error): ?>
<p class=\'errortext\'> <?php $error ?> </p>
<?php endforeach ?>
<?php }else if(!isset($errors)){
} ?>
</div>
操作函数注册在提交时设置“$\\u POST”。但它不会返回“$errors”数组,因为我在表单页中得到了“Undefined variable:errors”。所以我想知道如何让这个函数返回这个变量?
最合适的回答,由SO网友:s_ha_dum 整理而成
您需要的是筛选器,而不是操作。类似这样(注释被注释到代码中。您有一些PHP错误需要更正):
function signup_validate_insert($post){
$errors = false;
if (isset($post[\'submit_msg\'])) {
// validate , insert into database
}
return $errors;
}
add_filter(\'signup_insert\', \'signup_validate_insert\');
$errors = apply_filters(\'signup_insert\', $_POST);
if((!empty($errors))){ // $errors is going to be set; use empty() ?>
<div class="errors"><?php
foreach($errors as $error) { ?>
<p class=\'errortext\'><?php
echo $error; // echo was missing; you would have no output ?>
</p><?php
} ?>
</div><?php
}
过滤器返回内容。行动确实有用。我你想采取行动
echo
直接从您的回拨:
function signup_validate_insert($post){
$errors = false;
if (isset($post[\'submit_msg\'])) {
// validate , insert into database
}
if((!empty($errors))){ // $errors is going to be set; use empty() ?>
<div class="errors"><?php
foreach($errors as $error) { ?>
<p class=\'errortext\'><?php
echo $error; // echo was missing; you would have no output ?>
</p><?php
} ?>
</div><?php
}
}
add_action(\'signup_insert\', \'signup_validate_insert\');
do_action(\'signup_insert\', $_POST);
老实说,你正在做的事情可能过于复杂,整个事情最好是在没有钩子的情况下完成。您是否需要第三方对其进行扩展?
尝试查看:Clarification on filters and hooksDifference Between Filter and Action Hooks?