web-dev-qa-db-ja.com

comment_form()が間違ったアクションURLを生成する

ファイルcomments.phpを作成しました。その中に私は私のコメントセクションのための手動ループがあります。 offset = 0 + ((page - 1) * total_perからoffset + total_per)にループします。問題は、新しいコメントを追加したときに、コメントフォームのアクションフィールドに間違ったURLが生成されることです。その結果、コメントの最後のページ(つまり最も古いページ)に移動します。

私が以前に投稿したことに関して私は質問をしました。しかし、いくつかのWPソースコードをトレースした後、私はより多くの情報を見つけることができたので、私はオリジナルを削除しました。

wp-includes/comment-template.phpまたはwp-comments-post.phpを編集せずに、自分のテーマのコメントフォームが正しいアクションURLを生成するようにするにはどうすればよいですか。

wp-includes/comment-template.phpの734行目 が問題の原因です。なぜかわかりません。私のテーマをcpageをコピーするように変更したので、予想される状態に煩わされることはもうありません。私が知っていることは、コアファイルの行をハックすることで私の問題を解決できるということです。この変更により、生成されたURLは正しい場所に移動します。

if ( 'newest' === get_option( 'default_comments_page' ) )

もともとこれ。

if ( 'oldest' === get_option( 'default_comments_page' ) && 1 === $cpage )

このオプションが 'oldest'に設定されている場合のみ、URLのcpage値を無視しても意味がありません。どちらの状況でcpageを無視するかを検討する必要があると思います。それはそうではありません、なぜそれはいつそれを検討するだけハードコーディングされています 一番上が一番古い デフォルトのページが最も古いページに設定されていて、cpageが1ページ目にあるかこれは意味がありません!

get_comment_link()間違ったページ値を生成させるために私は何をしていますか?これらを簡単にデバッグする方法はありますか?コアコードにエコーを追加しようとしましたが、表示されませんでした。

これが私のコメントフォームに関連するすべてのソースコードです。 (私は自分の関数 "wbs"に名前空間を追加するのを忘れていました。そのペーストビンは編集できないので想像力を使ってください。 comments.php(top) http://Pastebin.com/aer07uvFfunctions.php(下)

申し訳ありませんが、<10の担当者とのリンクは2つしか投稿できません。

編集:

それでcomment_form()正しいURLを生成します、なぜならcomment-page-1は常に最も古いコメントを持つべきだからです。

3
Josh C

デフォルトでは、WordPressはコメントページを最も古いから最新のの順に並べます。 Settings-Discussionオプションが変更されていても、これは変わりません。これは固執している点です、コメントページを再編成するためにこれらの設定を変更するのではないかと思われるかもしれませんそうではありません。これらの設定は、基本的に、デフォルトのコメントループでのコメントの順序、および$cpageが空のときに表示されるページを定義します。

$cpageが空の場合は、投稿URLにアクセスしていて、その投稿内のコメントページではないことを意味します。

つまり、そのコードは動的ではないため、問題はリンクを取得することにはありません。問題は、コメントの表示方法にあります。 'default_comments_page''comment_order'にはそれぞれ2つの設定があり、4つの設定が可能です。それぞれ固有のオフセット計算が必要です。以下のこのコードでは、正しいページに正しいコメントを表示するのに必要なオフセット計算を見ることができます。

function grab_comments( $remainder, $page_total){
    global $cpage;
    $per_page = get_option('comments_per_page');
    $order_asc = get_option('comment_order') == 'asc';
    $order = $order_asc ? 'ASC' : 'DESC'; //Affects the offset

    if( get_option('default_comments_page') == 'newest' )
    {
        if ($cpage == '') $cpage = $page_total;

        if (get_option('comment_order') == 'desc')
        {
            // ; 8,7,6; 5,4,3; 2,1,0
            $offset = ( $page_total - $cpage ) * $per_page;
        }
        else
        {
            // ; 6,7,8; 3,4,5; 0,1,2
            $offset = ( ( $cpage - 1 ) * $per_page ) - ( $per_page - $remainder );
            if($offset < 0){
                $offset = 0;
                $per_page = $remainder != 0 ? $remainder : $per_page;
            }
        }
    }
    else // default page: 'oldest'
    {
        if ($cpage == '') $cpage = 1;

        if (get_option('comment_order') == 'asc')
        {
            // 0,1,2; 3,4,5; 6,7,8;
            $offset = ( $cpage - 1 ) * $per_page;
        }
        else
        {
            // 2,1,0; 5,4,3; 8,7,6;
            $offset = ( ( $page_total - $cpage ) * $per_page ) - ($per_page - $remainder);
            if($offset < 0){
                $offset = 0;
                $per_page = $remainder != 0 ? $remainder : $per_page;
            }
        }
    }
    $args = array(
        'post_id' => get_the_id()
        , 'number' => $per_page
        , 'offset' => $offset
        , 'order' => $order);
    return get_comments($args);
}
1
Josh C