Twitterで目にして「こうすればできるかな」と試してできたのでメモ的に。
いろいろ自信がないので使われる方は自己責任でお願いします。
実現したいこと
- URLのクエリパラメーターにつくfbclidのみを取り除く
fbclidはFacebookで共有されたり、Facebookの各種サービスからのアクセス時に強制的につけられるもののようで、例えば以下のような感じになります(と思いますがあってますかね…)。
- https://webutubutu.com/webdesign/7069?fbclid=aaa000bbb111
このfbclidと紐づいたクエリだけを取り除くというのが趣旨です。
コード
add_action( 'send_headers', 'remove_fbclid_from_url_query' );
function remove_fbclid_from_url_query(){
$url = (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] .
$_SERVER["REQUEST_URI"];
if(strpos($url, 'fbclid=')){
$url = remove_query_arg( 'fbclid',$url );
header( "HTTP/1.1 301 Moved Permanently" );
header( "Location: " . $url );
exit();
}
}
上記でfbclidをキーにしたクエリパラメーターだけが取り除けるかと。
試しにこのページにのみ上記コードを有効にしていますので、例えば以下のようなURLをアドレスバーに打ち込んで実際にこのページにアクセスしてもらえれば確認できます。
- https://webutubutu.com/webdesign/7069?fbclid=aaa000bbb111
- https://webutubutu.com/webdesign/7069?fbclid=aaa000bbb111&test=asdfgtrew
- https://webutubutu.com/webdesign/7069?test=asdfgtrew&fbclid=aaa000bbb111
下二つはfbclidのクエリパラメーターだけが取り除かれているはずです。
headerの書き方
//2行で記載
header( "HTTP/1.1 301 Moved Permanently" );
header( "Location: " . $url );
//1行で記載
header('Location: ' . $url, true, 301);
検索で探すと2行で記載する書き方がほとんどですが、1行での書き方もあります。
301リダイレクト
サンプルコードでは301リダイレクトになります。
302にのほうが良い場合はサンプルコード内の以下の部分を削除すれば302になります。
//以下を削除すれば302リダイレクト
header( "HTTP/1.1 301 Moved Permanently" );
//1行なら301を302に書き換え
header('Location: ' . $url, true, 302);
フック
send_headers()が用意されているので、フックはそれを使います。
このフックのタイミングで全ての条件分岐タグが使えるわけではありませんが、is_single()は使えました。
なお、header()を使っているためWordPressがHTTPヘッダを送信するまでの間に実行する必要があります。
どのフックの段階で呼ばれているのか調べてきれていませんが、とりあえず以下のような時点の動作を確認しました。
//エラーなく動作
wp
init
get_header
//エラーにはならないがリダイレクト動かず
wp_header
//すでにheaderが呼ばれているのでエラー
loop_start
the_post
参考サイト
- remove_query_arg WordPress私的マニュアル
- [Wordpress]WordpressでURLに独自にパラメータを追加するには
- WordPress をさらに安全にするための HTTP セキュリティヘッダーまとめ
- WordPressのページを判別できる条件分岐タグが有効なタイミングはどのフックから?
- PHP: header – Manual
- PHPのheader関数で301などHTTPステータスコードを指定してリダイレクトする
一部すでに記載しているため重複があります。
プラグイン
中身はほぼ同じですが試しに「fbclid除去」という名称でプラグイン化してみました。いわゆるオレオレプラグインです。
いきなり提供をやめるかもしれないのでその点あらかじめご了承ください。
結び
本番でいきなりではなく、テスト用のサイトで試されることをお勧めします。
当方は責任を負いかねますので。
2人がこの記事を評価
役に立ったよという方は上の「記事を評価する」ボタンをクリックしてもらえると嬉しいです。
連投防止のためにCookie使用。SNSへの投稿など他サービスとの連動は一切ありません。
プラグインでの提供、ありがとうございます!
wordpressの記事をfacebookページでシェアしているのですが、連動していることとしていないことがあって、色々テストすると、facebookに貼られたリンクのURLに謎パラメータが
それで調べているうちに、こちらのページにたどり着きました。
おかげさまで、fbのいいね!数がwp上でも正しく反映されるようになりました。
コメントありがとうございます!
SNSのシェア数計測時に効果があったということですね。
確かに余計なものを消してプレーンなURLにしないと妙なことになりますものね。
お役に立てたようでしたら何よりです。