gpt4 book ai didi

php - WordPress 帖子按类别和日期排序

转载 作者:行者123 更新时间:2023-11-30 00:00:25 26 4
gpt4 key购买 nike

我不知道该怎么做,这就是需要发生的事情。帖子需要按以下顺序显示:

  1. 类别 1 中的帖子(这是名称,而不是 ID,尽管我可以使用ID 是 22)
  2. 类别 2 中的帖子(ID 为 25)
  3. 其余帖子

每个类别都应按从最新到最旧的顺序排列,第三层中的类别不应包含前两个类别的任何重复项。

我尝试使用 UNION,但我永远无法得到正确的顺序,然后发现 UNION 最后只支持一个“ORDER BY”,这将它们全部搞乱了,达不到目的。

这是另一个问题。这必须与 $wp_pagenavi 一起使用,当前的方法只是将它们全部转储到一页上。

这是我目前拥有的:

<div id="content" class="post right">
<?php
$query = "(SELECT * FROM $wpdb->posts LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id = 22 ORDER BY post_date DESC) UNION ";
$query .= "(SELECT * FROM $wpdb->posts LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id = 25 ORDER BY post_date DESC)";
error_log($query);
$pageposts = $wpdb->get_results($query, OBJECT);

?>
<?php if ($pageposts) : ?>
<?php global $post; ?>
<?php foreach ($pageposts as $post) : ?>
<?php setup_postdata($post); ?>
<div class="article">
<p class="post-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php the_time('F jS, Y') ?><br />
<?php the_excerpt(); ?>
</div>
<?php if ( $wp_query->max_num_pages > 1 ) : ?>
<div class="navigation">
<?php wp_pagenavi(); ?>
</div>
<?php endif; ?>
<?php endforeach; ?>
<?php else : ?>
<div id="post-0" class="post error404 not-found">
<h1>Not Found</h1>

<div class="entry">
<?php
if ( is_category() ) { // If this is a category archive
printf("<p>Sorry, but there aren't any posts in the %s category yet.</p>", single_cat_title('',false));
} else if ( is_date() ) { // If this is a date archive
echo("<p>Sorry, but there aren't any posts with this date.</p>");
} else if ( is_author() ) { // If this is a category archive
$userdata = get_userdatabylogin(get_query_var('author_name'));
printf("<p>Sorry, but there aren't any posts by %s yet.</p>", $userdata->display_name);
} else if ( is_search() ) {
echo("<p>No posts found. Try a different search?</p>");
} else {
echo("<p>No posts found.</p>");
}
?>
<?php get_search_form(); ?>
</div>
</div>

最佳答案

从您的问题来看,您似乎想要所有已发布的帖子,而不仅仅是您提到的类别中的帖子。

因此,您需要 WHERE 标准来选择它们。我认为您不希望仅在这些类别中进行联合。

如果您使用这样的 ORDER BY 子句,您应该按照您提到的顺序获取它们。

ORDER BY $wpdb->term_taxonomy.term_id = 22 DESC, 
$wpdb->term_taxonomy.term_id = 25 DESC,
$wpdb->posts.post_date DESC

前两项的计算结果为 true 1 或 false 0。对它们进行排序 DESC 将 true 放在第一位。最后一项将所有内容按数据降序排列。

关于php - WordPress 帖子按类别和日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25086074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com