WordPressがコメントページ1を投稿ページにリダイレクトするのを停止しますか?


8

このページのように、投稿のコメント用に別のページを用意し/2011/02/post-name/たいのですが、投稿を表示し、リンクをクリックしてコメントを表示すると、次のようなページに移動します。/2011/02/post-name/comment-page-1/

次に、URLをチェックして「comment-page-x」が含まれているかどうかを確認し、含まれている場合はページを別の方法で表示します(投稿を削除して、毎回スクロールしなくても済むようにします。少し違う)。

これは機能しますが、WordPress comment-page-1は投稿ページにリダイレクトしcomment-page-1ます。URL に保持するために必要です。

これは可能ですか?どうすればできますか?ありがとう!


1
Q. upvotet the Q.マイクが言ったように:良いもの:)
カイザー

回答:


7

すばらしい質問です。WordPress 'cpage'は、URLが/comment-page-1/最後にあるときに設定されるクエリ変数にコメントページ番号を割り当てます。したがって、原因はredirect_canonical()関数の192行目です/wp-includes/canoncial.php

if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {

以来redirect_canonical()、私たちは何ができるか、アクションが、代わりに呼ばれるように私たち自身の関数を挿入たちの機能が設定されていることですとしての機能が設定されます'cpage'に問い合わせVARをfalse呼び出し、redirect_canonical()した後、セット'cpage'、それが何だったかに背中を。WordPressがリダイレクトするのを防ぎます。

独自の関数を挿入するには、2つのフック'init'などを呼び出す必要がある'template_redirect'ため'init'、次のdo_action()コードを追加する内部のWordPressコアの後に呼び出されるようにフックを設定しますredirect_canonical()

add_action('init','yoursite_init',11); //11=lower priority
function yoursite_init() {
  remove_action('template_redirect','redirect_canonical');
  add_action('template_redirect','yoursite_redirect_canonical');
}

add_action('template_redirect','yoursite_redirect_canonical');
function yoursite_redirect_canonical($requested_url=null, $do_redirect=true) {
  $cpage = get_query_var('cpage');
  set_query_var('cpage',false);
  redirect_canonical($requested_url, $do_redirect);
  set_query_var('cpage',$cpage);
}

そしてもちろん、あなたはあなたの何かで何かをする必要があります'cpage'。によって返された値を確認するかget_query_var('cpage')、別のフックを追加して、私が行ったコメント固有のテンプレートを作成できます。これは、通常ロードされるのと同じ[comments].phpであるが、名前の最後にの代わりに.php、つまりを使用して、テーマテンプレートファイルの外観を追加しますsingle[comments].php。このフィルターの優先順位を11に設定していることに注意しください。使用するプラグインがフックの後に自分自身を追加する場合は、さらに大きな数に設定する必要がある場合があります。

add_filter('single_template','yoursite_single_template',11);
function yoursite_single_template($template) {
  if (get_query_var('cpage'))
    $template = str_replace('.php','[comments].php',$template);
  return $template;
}

そして、それがすべてうまくいく証拠です!

コメント用のカスタムWordPressページテンプレートのスクリーンショット
(ソース:mikeschinkel.com


ショート...すごい!ここで+10を行うことはできません...
カイザー

詳細な応答をありがとう、しかし質問-私はこのコードをどこに置くことができますか?functions.phpを試しましたが、あまりうまくいきませんでした。20テーマを使用しているとすると、ファイルのどこにコードを追加すればよいですか?
Shaun

@ショーン-数字。:)一度私が私の答えに次のテキストを追加しなかったとき、私はそれを求められました:「次のコードをテーマのfunctions.phpファイルまたは.phpあなたが書いているプラ​​グインのファイルに追加できます。」 しかし、あなたはそれがうまくいっていないと言いますか?正確には何をしていませんか?echo "Test"; exit;各関数にステートメントを入れて、フックが起動していることを確認しましたか?競合する可能性のあるプラグインはありますか?112か所を変更してみました100?か?すべてのコードを含めましたか?というテーマテンプレートファイルを作成しましたsingle[comments].phpか?
MikeSchinkel、2011

@MikeSchinkel素晴らしい、ありがとう。私はsingle [comments] .phpを作成しませんでした!
Shaun

@ショーン-助けてくれてうれしい!
MikeSchinkel、2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.