親の投稿なしで自分のページに投稿のコメントを表示したいのですが。私は、単一の投稿ページでwp_list_comments()を使用し、自分のコメント表示マークアップを使用するためにコールバック関数を渡すことができることを知っています。私はこれをするつもりです、それで私はそれ自身のページの上にそのコメントを示すであろう各コメントとのリンクを含めることができます。
これがWordPressではない場合、私は使用します:
<a href = " www.example.com/individual_comment.php?comment_id = $comment_id">View single comment</a>
...そしてクエリ文字列から$ comment_idを取得します。
そのリンクはWordPressでどのように見えるでしょうか?つまり、直接取得するためにどのような文字列を含めるのでしょうか。たとえば、get_comment($ comment_id)とcomment_template()を呼び出すmy_comments.phpとします。
<a href = "<?php bloginfo('url');?>/what/goes/here?comment_id = $comment_id"<View single comment</a>
おそらくWordPressで新しいページを作成し、そのページにカスタムテンプレートを付けることができます。その場合、URLは通常そのページにアクセスするためのものになります。唯一の違いは、使用しているカスタムテンプレートは、クエリ文字列を介してcomment_idを受け取り、特定のコメントの詳細を取得するように設定し、テンプレートコードでコメントの詳細をエコーアウトすることです。
あなたが作成した "コメントの詳細"というワードプレスのページを持っているのであれば、あなたは http://www.domain.com/comment-details を介してそのページにアクセスすることができますパーマリンクが有効になっていると仮定します。だからあなたのリンクはこのようになるでしょう:
<a href = "<?php bloginfo('url');?>/comment-details?comment_id=$comment_id">View single comment</a>
[コメントの詳細]ページは、詳細を書き出すためのコードを含むカスタムテンプレートを使用するように設定されます。
他のものより洗練されたもの、そして実際には他のプラグインと競合する可能性のあるものすべてを実現するには、さまざまな方法がありますが、これらをすべて無視するのは、あなたが求めた方法に近い方法です。 :)
このソリューションは次のようなURLフォーマットをサポートします。ここで%comment_id%
はwp_comments
テーブルからのコメントの数値IDです。
まず、次のコードを使ってURLの書き換えを設定する必要があります。うまくいけば、それは合理的に自己説明的ですが頼むことを躊躇しないでください:
$wp->add_query_var('comment_id'); // Add the "behind-the-scenes" query variable that WordPress will use
$wp_rewrite->add_rewrite_tag('%comment_id%', '([0-9]+)','comment_id='); // Define a rewrite tag to match that assigns to the query var
$wp_rewrite->add_permastruct('comment-page', 'comments/%comment_id%'); // Define a URL pattern to match the rewrite tag.
また、ルールをフラッシュするにはプラグインアクティベーションフックでこのコードを呼び出す必要があります。または、管理コンソールのSettings> Permalinksにパーマリンクを保存することもできます。 /設定エリア:
global $wp_rewrite;
$wp_rewrite->flush_rules(false);
次にparse_query
フィルタフックを追加します。これはWordPressがクエリを調べた後に呼び出されます。追加したcomment_id
query_varが設定されているかどうかを確認し、設定されている場合は、目的のURLにアクセスしているかどうかを確認します。そうであるならば、それはコメントに関連しているポストに'p'
パラメータ(ポストIDに設定されるべきである)を設定するためにget_comment()
を使用してコメント配列をロードします。このようにWordPressが少なくともに関係なく実行されるというクエリを実行すると、以下のcomment.php
テーマテンプレートファイルに必要なものがロードされ、あなたが勝ちました後で必要になったときに別のクエリを実行する必要があります。このコードはまた奇妙な名前のcaller_get_posts
オプションを使ってスティッキーポストを無視するようにWordPressに指示します。
add_filter( 'parse_query', 'my_parse_query' );
function my_parse_query( $query ) {
global $wp;
if (isset($query->query['comment_id']) && substr($wp->request,0,9)=='comments/') {
$comment = get_comment($query->query['comment_id']);
$query->query_vars['p'] = $comment->comment_post_ID; // Causes the comment's post to be loaded by the query.
$query->query_vars['caller_get_posts'] = true; // Keeps sticky posts from invading into the top of our query.
}
}
それでも、/wp-includes/template-loader.php
フィルタを使ってtemplate_include
にコードをフックする必要があります。これはWordPressがクエリを調べてコメントの投稿を読み込んだ後に呼び出されます。ここでは、最初にquery_varのcomment_id
と、必要なURLをもう一度確認します。もしそうなら、/index.php
テンプレートページをテーマテンプレートファイルである/comment.php
に置き換えます。
add_filter( 'template_include', 'my_template_include' );
function my_template_include( $template ) {
global $wp,$wp_query;
if (isset($wp_query->query['comment_id']) && substr($wp->request,0,9)=='comments/') {
$template = str_replace('/index.php','/comment.php',$template);
}
return $template;
}
最後に、/comment.php
を呼び出すことを選択したテーマテンプレートファイルを作成する必要があります。それがあなたのテーマなので、あなたはそれをあなたが望むように見せたいと思うでしょうが、ここにあなたが始めるための例があります:
<?php
/*
* File: /wp-content/themes/my-theme/comment.php
*/
global $wp_query,$post;
$comment_id = $wp_query->query['comment_id'];
$comment = get_comment($comment_id);
$permalink = get_permalink($post->ID);
get_header();
?>
<div id="container">
<div id="comment-<?php echo $comment_id; ?>" class="comment">
<p>Comment by: <span class="comment-author">
<a href="<?php echo $comment->comment_author_url; ?>"><?php echo $comment->comment_author; ?></a></span>
on <span class="comment-date"><?php echo date("D M jS Y", strtotime($comment->comment_date)); ?></span>
at <span class="comment-time"><?php echo date("h:ia", strtotime($comment->comment_date)); ?></span>
</p>
<p>About: <a href="<?php echo $permalink; ?>"><?php echo $post->post_title; ?></a></p>
<blockquote><?php echo $comment->comment_content; ?></blockquote>
</div>
</div>
<?php
get_sidebar();
get_footer();
質問は?聞いてください。
P.S上記で説明したコードはすべて、テーマのfunctions.php
ファイルおよび/または独自のプラグインに入れることができます。注意しなければならないのは、URL書き換えフラッシュルールをプラグインアクティベーションフックに含める場合です。代わりに、管理コンソールのパーマリンクセクションで手動でフラッシュします。アクティベーションフックの登録方法については説明しませんでしたが、もっと詳しく知りたい場合はこちら をご覧ください 。