■問題
Cookieを利用して閲覧履歴を表示させるが、single.php でエラーが出てしまい解決できませんでした。
エラー内容はいくつか出ています。
Warning: array_diff(): Expected parameter 1 to be an array, null given (ファイルまでのパス) cookies.php on line 22 Warning: array_values() expects parameter 1 to be array, null given in (ファイルまでのパス) cookies.php on line 23 Warning: count(): Parameter must be an array or an object that implements Countable in (ファイルまでのパス) cookies.php on line 27 Warning: implode(): Invalid arguments passed in (ファイルまでのパス) cookies.php on line 27 Warning: Cannot modify header information - headers already sent by (output started at (ファイルまでのパス) cookies.php:22) in (ファイルまでのパス) cookies.php on line 35
■解決したいこと
Wordpressのカスタム投稿(カスタム投稿スラッグで指定)でユーザーの閲覧履歴一覧をトップページや記事詳細ページなどに表示したい。
エラーの解消。
■該当コード
<head>の直下 cookies.php として以下のコードを作成、テンプレートして読み込みcookies.php <?php //閲覧履歴設定 global $history; //記事ページのみcookieに登録 if (is_singular('カスタム投稿スラッグ')) { //カスタム投稿スラッグを指定 //閲覧履歴用のcookieが存在する場合 if (isset($_COOKIE['history'])) { //配列にする $history = explode(",", $_COOKIE['history']); //cookieに現在の記事IDがあるかどうか調べる $aruno = in_array($post->ID, $history); //ある場合の処理 if ($aruno == true) { //cookieにある現在の記事IDを削除(順番整理&表示除外用) $history = array_diff($rireki, array($post->ID)); $history = array_values($rireki); } //cookieが5個以上ある場合、4個に減らす if (count($rireki) >= 4) { $set_rireki = array_slice($rireki, 0, 4); } else { $set_rireki = $history; } //cookieに登録 $touroku = $post->ID.','.implode(",", $set_rireki); setcookie('history', $touroku, time() + 7776000, '/'); //cookieに現在の記事IDが無い場合の処理 } else { $touroku = $post->ID; setcookie('history', $touroku, time() + 7776000, '/'); } //記事ページ以外ならcookieの読み込みのみ } else { if (isset($_COOKIE['history'])) { $history = explode(",", $_COOKIE['history']); } } ?>
表示したい箇所に以下を記述(試しにトップページに記述したところ問題なく表示されました)
<?php global $history; if (!empty($history)): ?> <?php $args = array( 'post_type' => 'カスタム投稿スラッグ', 'posts_per_page' => 5, 'post__in' => $history, 'orderby' => 'post__in', ); ?> <?php $the_query = new WP_Query($args); ?> <?php if ($the_query->have_posts()): ?> <?php while ($the_query->have_posts()) : $the_query->the_post(); ?> <!-- ループ処理 --> <?php endwhile; ?> <?php endif; ?> <?php wp_reset_postdata(); ?> <?php endif; ?>
勉強不足で申し訳ありません。
情報として不足している場合はご指摘ください。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/23 11:46