スレッド化されていないコメントの返信に元のコメントへのリンクが含まれる


10

私が達成しようとしていることを説明します。

各コメントへの返信リンクを含む通常のスレッド化されていない(フラット/クラシック)コメントを希望します。誰かがコメントに返信すると、返信のコメントは、デフォルトの非スレッド化コメントの場合と同様に、最新のコメントとして上部(または下部)に表示されますが、デフォルトの非スレッド化コメントとは異なり、返信には次のリンクが表示されます。元のコメント/著者。

wordpressフォーラムで提案された解決策があります:

http://wordpress.org/support/topic/reply-to-link-for-chronological-non-threaded-comments

うまく機能しません。投稿者がさまざまなコードを配置しているファイルがわからない。私はコードを使用して、comment_postに関数をフックしようとしました:

add_action('comment_post', 'print_reply_link', 10, 2);

function print_reply_link( $comment_id, $approved ){
  if( $approved ){
    $comment = get_comment( $comment_id );
    if ( $comment->comment_parent ) {
    $parent = get_comment( $comment->comment_parent );
    $parent_link = esc_url( get_comment_link( $comment->comment_parent ) );
    printf( ' in reply to <a href="%1$s">%2$s</a>', $parent_link, $parent->comment_author );
    } 
  }
}

これにより、「著者名への返信」という空白ページが返されました。投稿を再読み込みした後、返信コメントが正しく表示されますが、元のコメントへのリンクはありません

私のコーディングスキルは非常に基本的なので、どうすればよいかわかりません。どんな助けにも非常に感謝します。


内容は何ですかhrefにおけるa点検要素『Chromeのツール(または好みのブラウザに似ています)「に従って返信to`に』次の?
mor7ifer

多くの試行錯誤の末、私は問題を解決しました。トリックは、コードを正しい順序で取得し、コメントと関数ファイルに配置することでした。引数は文字列として扱い、表現されることを意味します。これは、sprintf関数のphpマニュアルで詳細に説明されています。php.net / manuals%1$s
en

3
サイトを整理しておくため、また同じ問題を抱えている人が迅速かつ効率的に問題を解決できるように、解決策として提出した内容を提出する必要があります。
mor7ifer

はい、あなたが素晴らしいだろう実用的なソリューションを投稿できれば。
Borek Bernard

1
同意し、この動作を確認したいと思います。
helgatheviking 2012

回答:


4

これは私の解決策であり、WordPressフォーラムで提案されている解決策ではありません。結構簡単ですが、いくつかの手順が必要です。

1)wp-admin->設定->ディスカッションに移動し、スレッド化されたコメントをオフにします。これによりスレッド化が無効になりますが、特定のコメントに「返信」する機能も削除されます。それを元に戻す必要があります。

2)以下のスクリプトをテーマのfunctions.phpまたはプラグインに追加します。

function load_script_for_fake_threading() {
    if (is_singular()) wp_enqueue_script('comment-reply');
}
add_action('wp_enqueue_scripts','load_script_for_fake_threading');

3)コメントの印刷は、wp_list_commentsへのコールバックによって処理されます。TwentyElevenはで関数twentyeleven_comment()を使用しますfunctions.php。テーマにコールバックがない場合は、作成する必要があります。デフォルトでは、「wp-includes / comment-template.php」内のWalker_Commentクラスのstart_elメソッドのコンテンツが使用されます。それをコピーするか、テーマのコールバックをコピーして、関数の名前をに変更しますfake_threaded_comment

3)テーマのwp_list_comments関数を見つけcomments.php、コールバックを変更します。次のようになります。

wp_list_comments(array('callback'=>'fake_threaded_comment'));

4)これから少しごまかします。そのコールバック 'fake_threaded_comment'では、comment_reply_link関数の呼び出しが必要です。ハードコードされた 'depth'および 'max_depth'引数を渡すように編集する必要があります。「深さ」を1に、max_depthを2に設定します。これにより、「返信」ボタン/リンクが元に戻ります。

comment_reply_link( 
  array_merge( 
    $args, 
      array( 
        'reply_text' => __( 'Reply <span>&darr;</span>', 
        'themetextdomainname' ), 
        'depth' => 1, 
        'max_depth' => 2 
)));

5)親コメントへのリンクを設定します。コールバック関数の中で、への参照に気付いたかもしれません$comment$comment->comment_parent返信されたコメントのIDであり、get_comment_link($comment->comment_parent)(完全なアンカーマークアップではなく)親コメントのURLを提供します。get_comment($comment->comment_parent)親のコメントデータを取得します。だから、のようなもの...

$pcom = get_comment($comment->comment_parent);
echo '<a href="'.get_comment_link($comment->comment_parent).'">This is a reply to '.$pcom->comment_author.'</a>';

それでおしまい。特定のコメントにコメントできるようになりましたが、いったん公開すると、コメントはロード順に応じてコメントリストの最後または最初に表示されます。

WordPress 3.4.1のTwentyElevenでテスト済み(少し古くなっていますが、すでに私の開発サーバーにあります)。テーマやプラグインがこれを打破するためにできることは確かにありますが、うまく動作するテーマやプラグインがそれを打破するとは思いません。

それはその日の私の良い行いです。問題が発生した場合はお知らせください。

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