今回はWordpressに内部リンクを貼った時に来るコメントを来ないようにするための対処をしたので備忘録として残しておきます。
いつも何かを始めると何かが毎回起こる。。
困っていたこと
WordPressで記事内に内部リンクを貼って投稿すると必ずコメントが来る。
ということに困っていました。困っているというか邪魔というと。
調べてみるとこれはWordPressのピンバック機能というものらしいです。
ピンバックとは、参考にした記事のリンクを貼ることで、その記事のサイト管理者に自動通知する機能だそうです。
今回の場合は、自分の別の記事に対してリンクを貼っているので、自分自身に対して自動通知されているということですね。
とりあえず、コメントに毎回来るのはめんどくさいのでコメントが来ないよう対処します。
対処方法
対処方法としては以下の方法があるみたいです。
- リンクを相対パスにする
- プラグインを入れる
- functions.phpを変更する
参考サイト
【WordPress】内部リンクを貼るとコメント扱い(ピンバック)になる現象の解決方法
検討した結果、一番楽そうな「functions.phpを変更する」ことにしました。
何が一番楽かというとコピペだけで解決できそうだったからです。
プラグインも楽なんですが、サイト重くなる可能性あるので止めました。
というわけで、functons.phpを変更していきます。
functions.phpの設定手順
ちなみに現在の私のWordPressのテーマは「Cocoonの子テーマ」です。
- WordPressの管理画面を開く
- 左側メニューの「外観」>「テーマエディター」を選択
- 「functions.php」を選択
- 一番に下に次のコードをコピペします。
function no_self_ping( &$links ) { $home = get_option( 'home' ); foreach ( $links as $l => $link ) if ( 0 === strpos( $link, $home ) ) unset($links[$l]); } add_action( 'pre_ping', 'no_self_ping' );
- 「ファイルを更新」を選択
念のため画像を添付しておきます。
以上が設定方法でした。
補足
ここからは、コードの中身が気になったので少し調べてみました。
上記方法で解決するので、特にこの後に意味のある情報ないです(笑)
コードの意味
function no_self_ping( &$links ) {
「no_self_ping」という関数名を宣言しているだけです。
$home = get_option( ‘home’ );
homeという変数に「get_option(‘home’)」を代入しています。
get_option(‘home’)とは、WordPressサイトのURLのことです。
このサイトでいうと、「network-beginner.xyz」ですね。
関数の詳細は以下サイトを参照
関数リファレンス/get option
foreach ( $links as $l => $link )
foreach文を使って「$links」の中身を展開しています。
if ( 0 === strpos( $link, $home ) )
if文とstrpos関数を使って、リンクの中に自分のサイトのアドレスが含まれているかを確認しています。
strpos ( 検索対象文字列 , 検索文字列 [, 文字列の中での検索開始位置] )検索対象文字列に対して、検索文字列があるかどうかを判定して、あればその場所を数値で返します。
なければFALSEを返します。オプションを指定すると、検索するときの開始位置を変更することができます。
引用元:PHPのstrposで文字列が最初に現れる場所を取得する方法【初心者向け】
unset($links[$l]); }
もし含まれていた場合は、その部分をリンクとしてセットしないようにしてます。
add_action( ‘pre_ping’, ‘no_self_ping’ );
特定のアクションに関数をフックします。
このフックするとは、Aが動作した時に、Bも動作することをフックするといいます。
分かりやすく説明しようかと思いましたが、以下サイトの方が分かりやすかったので説明を割愛します。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典_フック (hook)
今回の場合だと、「pre_ping」を実行するタイミングで「no_self_ping」を実行することになります。
pre_pingは従来のリンクが貼られた時点で、サイトの管理者に通知する関数のことで、no_self_pingは今回作成した自分のサイトのリンクだった場合は通知しない関数です。
なので、この「no_self_ping」関数をfunctions.phpに書くことで、内部リンクがコメントとして通知されないということです。
補足の方が長かった。。
以上が今回の内容でした。ありがとうございました。
コメント