機能 ショートカットキー
リファレンス(参考URL)一覧へ移動 R
記事URLをMarkDownとしてコピー Ctrl+M
前のコードタグへ移動 Ctrl+←
次のコードタグへ移動 Ctrl+→
ヘルプを表示・非表示 H
Tips
- ショートカットキーは記事上で有効です。ヘッダー/フッター付近では機能しないことがあります。
- コードタグ移動機能がうまく動かないときは、Shift+F5でページを更新してみてください。
- このウィンドウを閉じるには、Hキーをもう一度押してください

WordPress PHP 特定カテゴリの記事に初回のアクセスがあった場合に警告する

プログラミング

(都合により記事を分割しました。)

一番苦戦したところです…。

まず、Cookieをまともにいじったのが初めてだったので、ちょっときつかった。PHPとJavaScriptのCookieのいじり方の違いあたりが。
あと、PHPはサーバーサイドだから言われてから気づくんだけど、PHPでCookieを設定するにはHTMLがレンダリングされている途中で設定することはできない。
さっきそういうエラーにあたって自己解決したんだけど…エラーメッセージは忘れましたが。

なので、header.phpではなく、functions.phpでCookieは定義する必要がある。
しかし、今回の場合、記事が特定のカテゴリに属しているか、is_single() && in_category(array('pink')で検証するわけなので、逆に今度は、functions.phpに書いてしまうと、これが反応しなくなる。

で、出た結論が、読み込まれた後にJavaScriptでCookie弄ろうか、ってこと。

でまぁ一応できました。

ShareX_ScreenShot_1af84dd8-dcf6-4a66-b501-0f9399e8db45.png (1006×681)


if (is_single() && in_category(array('black'))) { // echo '1'; $cookie_name = "_yuisBlackSessionHistory" ; $cookie_value = "true" ; if(!isset($_COOKIE[$cookie_name])) { echo "<script type='text/javascript'> document.cookie = \"_yuisBlackSessionHistory=true; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/; domain=yuis.org; ; \"; </script>" ; // echo '<script type="text/javascript"> alert("この記事には不快要素が含まれています。気分を害する恐れがありますことをご了承の上ご閲覧ください。") </script>' ; // or echo '<script type="text/javascript"> alertify.confirm(\'警告\', \'この記事には不快要素が含まれています。気分を害する恐れがありますことをご了承の上ご閲覧ください。\', function(){ alertify.success(\'承諾しました。\') } , function(){ // alertify.error(\'Cancel\') window.location = document.referrer ; }); </script>' ; } else { } }

やってること:
blackカテゴリの記事のとき、Cookie”_yuisBlackSessionHistory”が定義されていない場合、JavaScriptを埋め込んで_yuisBlackSessionHistoryを定義する。こうすることで、初回のアクセス時のみ何らかのアクションをすることができる。
そのアクションとして、ポップアップを表示し、はい/いいえ選択をさせ、はいなら続行。いいえなら前のページへ戻らせる。

で、肝心のどういう動作をするかってところですが、
alert()でも良いかなぁと思ってたんですが、やっぱダメですね。ポップアップブロックされます。意味ないです。
なので、alertifyっていうJavaScriptのライブラリを使用します。

alertifyで、はい/いいえが選択されたときにそれぞれ実行したい操作を簡単に分岐できます。

alertifyライブラリ。ヘッダに追加。


<script src="//cdn.jsdelivr.net/npm/alertifyjs@1.11.1/build/alertify.min.js"></script> <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/alertifyjs@1.11.1/build/css/alertify.min.css"/> <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/alertifyjs@1.11.1/build/css/themes/default.min.css"/>

この記事で欲しい情報が見つからなかった方へ

この記事の更新情報がある場合があります。
この記事は以下の記事とも関連性があると思われます。

WordPressでカスタムページを作って表示するPHPを制限する方法
Ubuntu 16.04にApacheでPHP7.0のローカル開発環境を構築
PHP クエリパラメータを受け取る
WordPress 見せたくない・隠したい記事をPHPでどうにかする
SQLでWordPressで非公開の記事を特定して対処する
WordPress タイトルに含む単語をそのままメタキーワードにする [SEO対策]
WordPress hooks メタディスクリプションにタイトルを含める


管理人の方針で、既存の記事の編集はせず、新しい情報や大きな既存情報の更新があった場合には、新しい記事として公開することになっています。
当記事で欲しい情報が見つからなかった・解決に至らなかった場合、これらのリンクがお役に立てるかも知れません。

どうやってこの関連記事を生成しているの?
この機能のPHPソースコード(2500行)

コメントを残す

Close Menu