【问题标题】:Display first comment of post outside the comments template (using SQL maybe)在评论模板之外显示帖子的第一条评论(可能使用 SQL)
【发布时间】:2011-03-13 06:47:51
【问题描述】:

在 Wordpress 中,如何在 cmets 表之外找到并显示第一条评论或管理员的评论?

我想像一个显示帖子第一条评论的 sql 查询......

有什么线索吗? 谢谢!

这是一个获取所有帖子的 5 个最近 cmets 的函数。我想编辑它并显示我正在阅读的最新帖子

function showLatestComments() {
  global $wpdb;  
  $sql = "
   SELECT DISTINCT comment_post_ID, comment_author, comment_date_gmt, comment_approved, SUBSTRING(comment_content,1,100) AS com_excerpt 
   FROM $wpdb->comments 
   WHERE comment_approved = '1'
   ORDER BY comment_date_gmt DESC 
   LIMIT 5";  
 $comments = $wpdb->get_results($sql);  
 $output .= '<h2>latest comments</h2><ul id="comm">';  
 foreach ($comments as $comment) { 
   $output .= '<li><strong>'. $comment->comment_author . ' said</strong> : "' . strip_tags($comment->com_excerpt). '..."</li>';
   }
 $output .= '</ul>';  
 echo $output;  
}//end function

【问题讨论】:

  • 在这样的问题中,code is king。换句话说,向我们展示sample code(在 SQL 中描述表和数据)和所需的输出。通过缩进四个额外的空格将行格式化为代码;编辑器工具栏中的“{}”按钮会为您执行此操作。将输出包装在 &lt;blockquote&gt;&lt;pre&gt; 元素中。单击编辑器工具栏中的橙色问号以获取有关格式设置的更多信息和提示。

标签: php sql wordpress


【解决方案1】:

我不熟悉 WordPress 的数据库结构,但基本上您必须获取当前帖子的 ID 并将其作为 WHERE 参数传递。

我假设comment_post_ID 会跟踪添加评论的帖子的ID?如果是这样:

$id = mysql_escape_string($_GET["id"]); // get id of post somewhere
  $sql = "
   SELECT DISTINCT comment_post_ID, comment_author, comment_date_gmt, comment_approved, SUBSTRING(comment_content,1,100) AS com_excerpt 
   FROM $wpdb->comments 
   WHERE comment_approved = '1' AND comment_post_ID = {$id}
   ORDER BY comment_date_gmt DESC 
   LIMIT 5";  

这将显示 5 个最近的 cmets 到您传递 id 的帖子

【讨论】:

  • 谢谢!我现在正在检查它!
  • 效果很好! (我编辑了获取帖子 ID 功能以使用 wordpress)谢谢!
  • 我还有一个问题!如果更容易,我如何检查评论者是否具有特定的 user_role(管理员、编辑器...)或 user_level?我发现例如管理员在此查询中 SELECT * FROM mydatabase.wp_usermeta` WHERE (umeta_id LIKE '%administrator%' OR user_id LIKE '%administrator%' OR meta_key LIKE '%administrator%' OR meta_value LIKE '%administrator%' ) LIMIT 0 , 30`
  • 我不知道用户角色是如何存储在 wordpress 数据库中的,抱歉。您必须提供有关用户角色数据如何存储在数据库中的更多信息
【解决方案2】:

我认为“第一次发帖”是指最早的评论。一种简单的方法是更改​​顺序(因此较早的 cmets 先出现),然后占据第一行。

$sql = "
 SELECT DISTINCT comment_post_ID, comment_author, comment_date_gmt, 
     comment_approved, SUBSTRING(comment_content,1,100) AS com_excerpt 
 FROM $wpdb->comments 
 WHERE comment_approved = '1'
 ORDER BY comment_date_gmt ASC 
 LIMIT 1";  

如果你这样做,只需要更改这两行。

 ORDER BY comment_date_gmt ASC 
 LIMIT 1";  

【讨论】:

  • 您好,感谢您的关注和回答。我想将该代码放入 single.php 并显示当前帖子的第一条评论
  • 既然您接受了返回最后五个 cmets 而不是第一个评论的答案,我想说您可能真的不需要这样做。 ;-)
猜你喜欢
  • 2022-01-10
  • 2011-09-17
  • 2012-07-15
  • 2019-08-24
  • 1970-01-01
  • 2017-02-11
  • 2019-12-07
  • 2018-10-21
  • 2015-05-24
相关资源
最近更新 更多