我正在尝试构建一个wordpress插件,从我的表单中获取信息并将其放入muy数据库中。这非常好用,但每当我尝试将页面重定向到您可以编辑项目的页面时,我会收到标题已发送的错误。我尝试了get_header();在重定向下面尝试使用钩子但是没有任何作用。我必须在这里找到一些东西。
<?php
global $wpdb;
$path='admin.php?page=my_pirazzo_locations';
$path2='admin.php?page=my_pirazzo_items';
$url=admin_url($path);
$url2=admin_url($path2);
//global $wpdb;
$userdb = $wpdb->prefix. 'users';
$getdata = $wpdb->get_results("SELECT * FROM $userdb");
//if (isset($_GET['id']))
//{
// $id= $_GET['id'];
// echo $id;
//}
//echo $userdb;
if (isset($_POST["submit"]) && $_POST["client"] != "" && $_POST["startdate"] != "" && $_POST["enddate"] != "") {
global $wpdb;
$userdb = $wpdb->prefix . 'users';
$table = $wpdb->prefix . "b2bdomain";
$user_id = strip_tags($_POST["client"]);
$startdate = strip_tags($_POST["startdate"]);
$enddate = strip_tags($_POST["enddate"]);
$isActive = 0;
if ($startdate < $enddate) {
$isActive = 1;
}
$query = $wpdb->get_results("SELECT user_login FROM $userdb WHERE ID = $user_id");
$name = $query[0]->user_login;
$wpdb->insert(
$table,
array(
'userid' => $user_id,
'isActivated' => $isActive,
'name' => $name,
'start_time' => $startdate,
'end_time' => $enddate,
)
);
$url = 'admin.php?page=my_pirazzo_edit';
ob_clean();
ob_start();
wp_redirect($url);
};
?>
<!-- This file should primarily consist of HTML with a little bit of PHP. -->
<div class="wrap">
<h1>beheer zone</h1>
<div class="postbox">
<div class="meta-th">
<h2>nieuwe zone toevoegen</h2>
</div>
<div class="meta-td">
<form method="post" name="cleanup_options" action="">
<fieldset>
<label for="client">Selecteer een Klant</label>
<select name="client" id="client">
<?php foreach($getdata as $data){ ?>
<option value="<?php echo $data->ID ?>"><?php echo $data->user_login ?></option>
<?php } ?>
</select>
</fieldset>
<fieldset>
<label for="startdate">Startdatum</label>
<input type="date" name="startdate" >
<label for="enddate">Einddatum</label>
<input type="date" name="enddate" >
</fieldset>
<?php submit_button('bewaar de zone', 'primary','submit', TRUE); ?>
</form>
</div>
</div>
<hr>
<div class="postbox">
<h2>voeg locatie's toe</h2>
<a href="<?php echo $url ?>"><button class="button-primary">voeg een locatie toe</button></a>
</div>
<hr>
<div class="postbox">
<h2>voeg Producten toe</h2>
<a href="<?php echo $url2 ?>"><button class="button-primary">voeg een locatie toe</button></a>
</div>
答案 0 :(得分:0)
您可以尝试在wp_loaded挂钩中发送您的帖子数据。在将标题内容发送到浏览器之前,您只能使用wp_redirect。因此,而不是在模板文件中处理表单。将它们移动到 wp_loaded 挂钩可能会对您有所帮助。
请查看以下功能以供参考。请参阅https://cdn.tutsplus.com/wp/authors/legacy/tom/2012/09/25/wordpress-core-load-lifecycle.png
add_action( 'wp_loaded', 'pirazzo_edit_form' );
function pirazzo_edit_form(){
if( isset($_POST["submit"]) && $_POST["client"] != "" && $_POST["startdate"] != "" && $_POST["enddate"] != "") {
//YOUr additional code here
// process form, and then Redirect
$url = 'admin.php?page=my_pirazzo_edit';
wp_redirect($url);
exit();
}
}
将上述代码放入 functions.php 文件中进行测试。
另外,你是WordPress的新手吗?当我正确阅读你的代码时,很少有东西能打动我。现在,WordPress核心内置了许多功能,例如查询用户。我看到你使用了wpdb对象,你不需要这样做。
以下内容适用于您的用户选择字段。以下是我们如何使用get_users函数直接查询用户。请参阅 https://codex.wordpress.org/Function_Reference/get_users
<select name="client" id="client">
<?php $all_users = get_users(); ?>
<?php foreach($all_users as $data){ ?>
<option value="<?php echo $data->ID ?>"><?php echo $data->first_name .' ' .$data->last_name; ?></option>
<?php } ?>
</select>
同样,我在表单提交中看不到任何nonce字段。请使用nonce来保证安全。请检查以下我们如何在WordPress中实现此功能。
<form method="post" name="cleanup_options" action="">
<?php
//Please check why this is needed https://codex.wordpress.org/Function_Reference/wp_nonce_field
wp_nonce_field( '_nonce_demo_action_field', '_demo_action_name' );
?>
在表单下方或表单内的任何位置添加上述代码 wp_nonce_field()。您正在发布随机数秘密数据。因此,当我们拦截发送的请求时,我们将验证这一点,如下所示:
//Functions.php
add_action( 'wp_loaded', 'pirazzo_edit_form' );
function pirazzo_edit_form(){
if( isset($_POST["submit"]) && wp_verify_nonce( $_POST['_demo_action_name'], '_nonce_demo_action_field' ) ) {
global $wpdb;
$userdb = $wpdb->prefix . 'users';
$table = $wpdb->prefix . "b2bdomain";
$user_id = strip_tags($_POST["client"]);
$startdate = strip_tags($_POST["startdate"]);
$enddate = strip_tags($_POST["enddate"]);
$isActive = 0;
if ($startdate < $enddate) {
$isActive = 1;
}
$query = $wpdb->get_results("SELECT user_login FROM $userdb WHERE ID = $user_id");
$name = $query[0]->user_login;
$wpdb->insert(
$table,
array(
'userid' => $user_id,
'isActivated' => $isActive,
'name' => $name,
'start_time' => $startdate,
'end_time' => $enddate,
)
);
$url = 'admin.php?page=my_pirazzo_edit';
wp_redirect( $url );
exit;
}
}
以上内容应添加到functions.php文件中。我没有触及代码中的任何内容。所以,你需要自己重构它。
希望您了解我所写的过程。如果有任何混淆,请在评论中告诉我。