私は好きなプラグインを作りました。ショートコードを使用して、ボタンを表示したい場所にボタンを「お気に入り/お気に入りリスト」に表示できます。このボタンは、次のコードでクッキーの配列にpages/posts/blogs/articlesなどのpost_IDを追加するためのものです。
<?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']);
}
}
?>
これはうまく機能しており、post_idsはcookie配列に格納されています。コードprint_r(unserialize($_COOKIE['favorites']));
を使えば、Cookieを印刷して、保存されているすべてのpost_idの概要を見ることができます。
問題/質問
現在、お気に入りリストを表示するための新しいショートコードを追加しました。そのリストの各値は、そのクッキーを削除/設定解除するためのごみ箱を取得しています。今私は働くために次のコードを取得する必要があります。
<?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();
}
?>
この部分のコードの出力:
編集
関数:
<?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);
}
?>
私が理解できないのは、なぜ私のsetcookie();
が機能していないのです。それはページの始めにあり、私は最初にクッキーを設定できるようにページを更新しますね。
すべての助けは感謝します、事前に感謝します!
あなたは削除される項目を示すためにフォームの中に各項目のIDを入れる必要があります。
<?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
}
?>
_ソリューション_
まず第一に、私を正しい方向に推してくれたLaxmanaに感謝します。
このコードには関数set_cookie_delete()
があります。
関数
<?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']);
}
?>