php - WordPress 帖子,按自定义表格结果排序

标签 php mysql wordpress

我有一个博客,我需要根据完全自定义表格中的值数量重新排序。我不使用元数据的原因有点复杂,但这正是我需要做的。

我只需要计算 wp_upvotes 表中具有与 WordPress 博客文章的 ID 相匹配的 postID 的行数,并按最多“赞成票”到最少的顺序排序。即使 wp_upvotes 表中没有值,此结果也应包括 WordPress 帖子。

我正在尝试的查询是这样的:

$post = $wpdb->get_results("
     SELECT wp_posts.*, COUNT(wp_upvotes.id) AS upvotes
     FROM wp_posts 
     LEFT JOIN wp_upvotes 
               ON wp_posts.ID = wp_upvotes.postID 
               WHERE wp_posts.post_status = 'publish'  
               AND wp_posts.post_type = 'post'
      ORDER BY upvotes DESC, wp_posts.date DESC 
      LIMIT $pageNum, $numToLoad
  ", ARRAY_A);  

最佳答案

如果要确保每个表之间存在匹配项,使用 LEFT JOIN 是正确的 - 一种简单的思考方式是 everything “左侧”(wp_posts) 将被包含,“右侧”(wp_upvotes) 的内容如果匹配则将被包含,否则为空。只需使用 JOIN 即可确保只有匹配时才会显示两个表中的行。

我的猜测是您需要包含一个 GROUP BY p.ID 以使每个 upvotes 值特定于特定帖子。

请注意,您在使用 wp_posts.date 而不是 wp_posts.post_date 时也会出错;

如果您想在某个数据库前缀不是wp_.

如果您只想查看 wp_posts 中的数据结果,您可以使用 ORDER BY 运行数据库查询并返回列,或者如果您想要要使用 WordPress 过滤器(在 the_title()the_content() 之类的东西上,您可以将帖子 ID 传递到带有 post_id__in 的 WP_Query 和orderby=post__in 参数 - 但是,您需要通过 ID 引用回 $upvotes 值。

global $wpdb;
$sql = <<<SQL;
    SELECT p.*, COUNT(v.id) as upvotes
    FROM {$wpdb->posts} p
    JOIN {$wpdb->prefix}upvotes v
      ON p.ID = v.postID
    WHERE 
      p.posts_status = 'publish'
      AND p.post_type = 'post'
    GROUP BY p.ID
    ORDER BY upvotes DESC, p.post_date DESC
    LIMIT $pageNum, $numToLoad
SQL;

// use ARRAY_A to access as $row['column'] instead of $row->column
$rows = $wpdb->get_results( $sql ); 
foreach ( $rows as $row ){
    $content = $row->post_content;
    $upvotes = $row->upvotes;
}

关于php - WordPress 帖子,按自定义表格结果排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26680319/

相关文章:

css - 正文和页脚之间不需要的空间

javascript - 使用 Ajax 将数据传递到 PHP 文件

php - 使用 HttpURLConnection 使用 php 脚本将数据从 Android POST 到 MYSQL

mysql - mysql 查询必须如何才能达到显示的结果?

mysql - 如何查询重复字符超过 2 个的单词?

java.lang.ClassNotFoundException : com. mysql.jdbc.Driver(jar 文件已链接并放置在 WEB-INF/lib 中)

html - HTML 样式属性与直接将属性放入标签之间的核心区别是什么?

php - 从 MySQL 表中删除特定条目的按钮代码(使用 php)?

javascript - 如何让 JavaScript 在 Bootstrap 弹出窗口内执行?

wordpress - wp_remote_post 响应体被保护