web-dev-qa-db-ja.com

ポップアップでコメントを表示する

私はid=22でページのためにポップアップでコメントを見せたいです。

これは、クリックするとポップアップが開くアンカーです。

<a class="button button-small button-line-light comment-popup" 
    href="<?php echo get_stylesheet_directory_uri();?>/comments-detail.php">View All</a>

私がcomments-detail.phpにプレーンHTMLを持っている場合、popupはそのHTMLを表示します。

しかし、id=22のページcomments-detail.phpのコメントリストを取得しようとすると、次の簡単なコードが表示されます。

<?php 
    $args = array(
        'post_id' => 22
    );
    $comments = get_comments( $args );
?>

それから私はエラーが出ます:

未定義の関数への呼び出しget_comments()

私は何をしているのですか、それとも私のアプローチはまったく間違っていますか?

1
terminator

あなたはここで車輪を再発明しています;-)

問題

あなたはこのアプローチでWordPressを迂回しているので、それはエラーメッセージを説明します。

テーマディレクトリ内のカスタムファイルにアクセスすると、notが自動的にWordPressコアをロードします。

すでに利用可能

これはすでにWordPressコアでサポートされています。

あなたは comments_popup_link()comments_popup_script() をチェックアウトするべきです。

一般的に、与えられた記事について、あなたはすべてのコメントを得ることができます。

example.tld/?comments_popup=123

123はsome投稿IDです。

あなた自身のバージョンのcomments-popup.phpファイルを現在のテーマディレクトリに置くことで、デフォルトのコメントポップアップテンプレートを上書きすることができます。

デフォルトのものは/wp-includes/theme-compat/comments-popup.phpにあります。

WP 4.2.2に関する注意事項 - 誤ったインラインドキュメント

コアでは、私たちはこの説明を得ました:

  • テンプレートのパスは 'comments_popup_template'フックでフィルタリングできます。

しかしそれは正しくありません。テンプレートは、

$template = get_query_template( 'comments_popup', array( 'comments-popup.php' ) );

get_query_template()内では、次のようなクリーニングがあります。

    $type = preg_replace( '|[^a-z0-9-]+|', '', $type );

ここで、タイプcomments_popupcommentspopupに変更されています。

したがって、正しいフィルタは次のとおりです。

add_filter( 'commentspopup_template', function( $template )
{   
    return $template;
} );

正しい型はcomments-popupではなくcomments_popupであることを意図していたようです。しかし、それではアンダースコアが削除された理由を疑問に思うことができます。詳しくはチケット #21213 をご覧ください。

私はここで #32989 のインラインドキュメントに関してコアTracチケットを提出しました。

2
birgire