J'ai fait un plugin préféré. Avec un shortcode, je peux afficher le bouton sur "une liste de souhaits/favoris" où je le souhaite. Ce bouton sert à ajouter les post_ID de pages/posts/blogs/articles etc. dans un tableau de cookies avec le code suivant:
<?php
if (isset($_POST['submit_wishlist'])){
if (!isset($_COOKIE['favorites'])){
//echo 'not set <br>';
$cookie_value = get_the_ID();
$init_value = array($cookie_value);
$init_value = serialize($init_value);
//echo $init_value;
setcookie('favorites', $init_value, time() + (86400 * 30), "/");
wp_redirect($_SERVER['HTTP_REFERER']);
} else {
//echo 'set <br>';
$cookie_value = get_the_ID();
$prev_value = $_COOKIE['favorites'];
$prev_value = stripslashes($prev_value);
$prev_value = unserialize($prev_value);
array_Push($prev_value, $cookie_value);
$new_value = serialize($prev_value);
//echo $new_value;
setcookie('favorites', $new_value, time() + (86400 * 30), "/");
wp_redirect($_SERVER['HTTP_REFERER']);
}
}
?>
Cela fonctionne très bien et les post_ids sont stockés dans le tableau de cookies. Avec le code print_r(unserialize($_COOKIE['favorites']));
, je peux imprimer le cookie et obtenir une vue d'ensemble de tous les post_ids enregistrés.
Problème/Question
Actuellement, j'ai ajouté un nouveau code court pour afficher la liste des favoris. Chaque valeur de cette liste reçoit un bouton corbeille pour supprimer/annuler la définition de ce cookie. Maintenant, j'ai besoin que le code suivant fonctionne:
<?php
$all_favorites= unserialize($_COOKIE['favorites']);
echo '<table>';
foreach($all_favorites as $key => $value) {
echo '<tr>';
echo 'Post-ID = ' . $value . ' ';
?>
<form method="POST"><button type="submit" class="btn btn-default" name="delete"><span class="glyphicon glyphicon-trash"></span></button>
<input type="hidden" name="delete_id" value="<?php echo $value; ?>" />
</form><br>
<?php
echo '</tr>';
}
echo '</table>';
if (isset($_POST['delete'])){
//function for setting new cookie, function is displayed on each page before the get_header()
set_cookie_delete();
}
?>
La sortie de cette partie de code:
Modifier
La fonction:
<?php
function set_cookie_delete(){
$all_favorites = unserialize($_COOKIE['favorites']);
$delete_id = $_POST['delete_id'];
echo 'deleted value = ' . ' ' . $delete_id . '<br>';
$array_delete = array_diff($all_favorites, array($delete_id));
$array_delete = serialize($array_delete);
print_r($array_delete);
wp_redirect($_SERVER['HTTP_REFERER']);
setcookie('favorites', $array_delete, time() + (86400 * 30), "/");
//echo '<br><br>';
//print_r($_COOKIE);
}
?>
Ce que je ne comprends pas, c'est pourquoi ma setcookie();
ne fonctionne pas. C'est au début de la page et j'ai tout d'abord actualisé la page pour que le cookie puisse s'installer, non?
Toute aide sera appréciée, merci d'avance!
Vous devez mettre l'identifiant de chaque élément dans le formulaire pour indiquer l'élément à supprimer.
<?php
$all_favorites= unserialize($_COOKIE['favorites']);
echo '<table>';
foreach($all_favorites as $key => $value) {
echo '<tr>';
echo 'Post-ID = ' . $value . ' ';
?>
<form method="POST">
<input type="hidden" name="id" value="<?php echo $value; ?>">
<button type="submit" class="btn btn-default" name="delete">
<span class="glyphicon glyphicon-trash"></span>
</button>
</form><br>
<?php
echo '</tr>';
}
echo '</table>';
if (isset($_POST['delete'])){
$id = $_POST['id']; // do security checks (sanitize etc)
// unset post with $id from cookie
}
?>
SOLUTION
Tout d’abord, merci à Laxmana de m’avoir poussé dans la bonne direction!
J'ai la fonction set_cookie_delete()
à ce code:
La fonction
<?php
if (isset($_POST['delete'])){
$all_favorites = unserialize($_COOKIE['favorites']);
$delete_id = $_POST['delete_id'];
//echo 'deleted value = ' . ' ' . $delete_id . '<br>';
$array_delete = array_diff($all_favorites, array($delete_id));
$array_delete = serialize($array_delete);
//print_r($array_delete);
setcookie('favorites', $array_delete, time() + (86400 * 30), "/");
wp_redirect($_SERVER['HTTP_REFERER']);
}
?>