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

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

新規登録して質問してみよう
ただいま回答率
85.44%
WordPress

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

PHP

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

Q&A

解決済

3回答

6138閲覧

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

bearmax0218

総合スコア11

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/02/13 07:24

編集2018/02/13 12:37

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の一番上に記述し問題なくリダイレクトした。
どこが違うのでしょうか?
分かる方が居られましたら、どうか回答お願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/13 07:46

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

回答3

0

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

php

1wp_safe_redirect( $location ); 2exit;

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

php

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

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

php

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

動作しました。

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

投稿2018/02/14 01:26

編集2018/02/14 01:35
bearmax0218

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

denux.net

2019/05/16 01:36 編集

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

0

ベストアンサー

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/13 07:57

編集2018/02/13 07:57
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bearmax0218

2018/02/14 01:28 編集

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

0

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

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

functions.php

1add_action('comment_post', function($comment_ID, $comment_approved, $commentdata) { 2 3 // ページIDを取得 4 $comment = get_comment($comment_ID); 5 $post_id = $comment->comment_post_ID; 6 7 // カスタムフィールドに登録されたリダイレクト先URLを取得 8 //(フィールド名がcomment_redirectの場合) 9 $redirect_to = get_post_meta($post_id, 'comment_redirect', true); 10 11 // リダイレクト先URLが登録されていれば遷移させる 12 if ($redirect_to) { 13 wp_safe_redirect($redirect_to); 14 exit; 15 } 16 17}, 10, 3);

投稿2019/03/22 04:14

ToruNakata

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問