isset之后的页面重定向



在页面顶部,我得到一个url:

$posturl = $_GET['posturl'];

工作,我得到了URl。

我有一系列复选框来删除表单帖子中的附件:

<form action="" method="post">
<?php
$attachments = get_posts(array( 
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' =>'any',
'post_parent' => $_GET['post_id']
));
if ($attachments) {
foreach ( $attachments as $attachment ) {
$myNewImg = wp_get_attachment_url( $attachment->ID );
$pathtofile = $myNewImg;
$info = pathinfo($pathtofile);
if ( ($info["extension"] == "jpg") || ($info["extension"] == "png")  || ($info["extension"] == "JPG")  || ($info["extension"] == "jpeg")  || ($info["extension"] == "gif") ) { ?>
<img src="<?php echo $myNewImg; ?>" class="bnr_img img-fluid mx-auto d-block" alt="">
<input type="checkbox" class="img_delete" name="img_delete[]" value="<?php echo $attachment->ID; ?>">
<?php } else { ?>
<video src="<?php echo $myNewImg; ?>" controls></video>
<input type="checkbox" class="img_delete" name="img_delete[]" value="<?php echo $attachment->ID; ?>">
<?php }
}
}
?>
<input class="btn btn-dark" type="submit" name="delete_media" value="Delete media">
</form>

一切都很好,我得到了媒体附件和旁边的复选框:

我现在想删除选中的媒体文件,所以它们是一个数组(img_delete[](,所以我这样做:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['delete_media'])) {
foreach($_POST['img_delete'] as $value) {
wp_delete_attachment( $value, true);
} 
header('Location: '.$posturl);
}
}
?>

没关系,但是:

  1. 页面不刷新
  2. 页面停留在那里,但它只显示一个项目(即使有2个已经删除(
  3. 如果我刷新页面,我会看到两者都已删除

所以基本上我试图重定向页面,以便用户看到没有媒体附件的实时页面。

每当您想在PHP中使用header()重定向时,您应该始终使用exit(),如下所述。

此外,请确保在发送任何输出之前进行重定向。否则,您将收到headers already sent警告,并且重定向将不起作用。

此外,为此,您应该使用wp_safe_redirect((或wp_redirect((:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['delete_media'])) {
foreach($_POST['img_delete'] as $value) {
wp_delete_attachment( $value, true);
} 
if ( wp_safe_redirect( $posturl ) ) {
exit;
}
}
}
?>
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST'){
if(isset($_POST['delete_media'])){
foreach($_POST['img_delete'] as $value) {
wp_delete_attachment( $value, true);
} 
wp_redirect($posturl); 

}
}
?>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['delete_media'])) {
foreach($_POST['img_delete'] as $value) {
wp_delete_attachment( $value, true);
} 
header('Location: '.$posturl);
}
}
?>

你可以使用简单的javascript如下所示-

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['delete_media'])) {
foreach($_POST['img_delete'] as $value) {
wp_delete_attachment( $value, true);
} 
?>
<script>location.reload();</script>
<?php

}
}
?>

最新更新