質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • PHP

    24035questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    8933questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

WordPress|コメント後のリダイレクト

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 945

bearmax0218

score 4

WordPressでカスタム投稿タイプのページ別にコメントされたタイミングでそれぞれのサンクスページへリダイレクトしたい。
functions.phpに

function redirect_after_comment() {
    wp_safe_redirect( home_url( '/?p=128' ) );
    exit();
}
add_filter( 'comment_post_redirect', 'redirect_after_comment' );


を記述し動作した。
次は各コメントページから各サンクスページへリダイレクトさせる為、
ページ判定の条件分岐を追記。
コメントページ1→サンクスページ1
コメントページ2→サンクスページ2
コメントページ3→サンクスページ3
それぞれのコメントページへコメントしたタイミングでサンクスページへリダイレクトさせたい。

function redirect_after_comment() {
    if ( is_single('12') ) {
        wp_safe_redirect( home_url( '/?p=128' ) );
        exit();
    }
}
add_filter( 'comment_post_redirect', 'redirect_after_comment' );


しかし、コメントしても/wp-comments-post.phpで止まって白いページのまま。
コメント自体は投稿されているが、リダイレクトがうまくいってないようです。

if ( is_single('12') ) {
    wp_safe_redirect( home_url( '/?p=128' ) );
    exit();
}


は、テストでheader.phpの一番上に記述し問題なくリダイレクトした。
どこが違うのでしょうか?
分かる方が居られましたら、どうか回答お願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • aozuki

    2018/02/13 16:46

    ソースコードはコードブロックで囲ってください。質問の編集画面で<code>を押すとコードブロックを挿入できます。

    キャンセル

回答 3

checkベストアンサー

+1

is_single()現在表示されているページが投稿ページかどうかをチェックしてbooleanで返します。

header.phpに書けばそのチェック処理は投稿ページで行われますが、
functions.phpに書けばその処理はフック先、つまりwp-comments-post.phpで行われます。

wp-comments-post.phpis_single()をチェックしても投稿ページじゃないのでfalseが返ってきますよね。

ですのでwp-comments-post.phpではリファラやPOSTされてきた投稿ページのURL($_POST['redirect_to']に入ってるかも?未確認です)を見て条件を切り分ける必要があります。


質問への追記・修正の依頼 に書いてしまったのですが
可読性が落ちてしまうので、ソースコードはコードブロックで囲むようにした方が回答もつきやすいです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/14 10:26 編集

    良いヒントをありがとうございました。なんとか動作させることが出来ました。

    キャンセル

+1

構造を確認するため、wp-comments-post.phpの一番下にある

wp_safe_redirect( $location );
exit;


をチェック。
$locationにはURL/#comment-数字が入っていたので、
URLの中にあるスラッグで判定することにしてwp-comments-post.php
を直接書き換えてみました。

if( strstr( $location,'パーマリンクのスラッグ' )==true ){
    wp_safe_redirect( home_url('/?p=数字') );
    exit;
}

問題なくコメント後にリダイレクトしました。
コアファイルの編集は
アップデートの上書きされるのが厄介なので、wp-comments-post.php
元に戻し、functions.phpに以下を追記。

function redirect_comments( $location ) {
    if( strstr( $location,'パーマリンクのスラッグ' )==true ){
        $location = home_url('/?p=数字');
        return $location;
    }
}
add_filter( 'comment_post_redirect', 'redirect_comments', 10,2 );


動作しました。

ありがとうございました。
なんとか出来ましたが、もっといい方法があればコメントください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/16 10:32 編集

    特定のページからコメントを送信した時だけリダイレクトする方法を探してここにたどり着きました。
    とても、参考になりました。ありがとうございました。

    キャンセル

0

コメント送信後に実行されるcomment_postアクションフックを利用する方法もあります。このフックには第一引数にコメントIDが渡されるので、get_comment(コメントID)でコメントオブジェクトを取得し、コメントオブジェクトに入っている投稿IDでどの投稿に対するコメントが送信されたのかを判断できます。

リダイレクト先をカスタムフィールドで登録するようにしておけば、プログラム内に遷移先URLをハードコーディングしなくて済むので、保守性が高まるでしょう。

add_action('comment_post', function($comment_ID, $comment_approved, $commentdata) {

  // ページIDを取得
  $comment = get_comment($comment_ID);
  $post_id = $comment->comment_post_ID;

  // カスタムフィールドに登録されたリダイレクト先URLを取得
  //(フィールド名がcomment_redirectの場合)
  $redirect_to = get_post_meta($post_id, 'comment_redirect', true);

  // リダイレクト先URLが登録されていれば遷移させる
  if ($redirect_to) {
    wp_safe_redirect($redirect_to);
    exit; 
  }

}, 10, 3);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • PHP

    24035questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    8933questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。