如果只有一个特定类别,则 wordpress 从循环中排除帖子

标签 wordpress

我有这个类别,它是“社区帖子”,我不希望它出现在我的主页循环中,所以我将它添加到我的查询中

<?php query_posts(array('showposts' => 4,'category__not_in' => $id_communityposts,));?>

这对我来说工作正常,但我希望一些“社区帖子”出现在主页循环中。 (异常(exception))

所以我只想排除具有一个类别的帖子作为“社区帖子”,如果它有这个类别并且更多它正常显示。

最佳答案

第一件事do not use query_posts - 永远不要使用它,因为它会改变主查询。请改用 get_posts - 它更安全并且执行相同的任务。

为了回答您的问题,让我们首先想象一下查询在 SQL 中的样子(假设您的 $id_communityposts 等于 2):

SELECT DISTINCT wp_posts.* 
FROM wp_posts, wp_postmeta
    LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
    LEFT JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
WHERE 
    wp_posts.ID = wp_postmeta.post_id AND
    (
        (wp_term_taxonomy.taxonomy = 'category' AND wp_term_taxonomy.term_id NOT IN(2))
        OR
        (wp_postmeta.meta_key = 'featured' AND wp_postmeta.meta_value = 1)
    )
ORDER BY wp_posts.post_date DESC
LIMIT 4

因此我们查询帖子、帖子元和分类表并制定两个可能的条件:

  • 类别 ID 不是 2,OR
  • 帖子的 featured 元键设置为 1(根据您存储“特色”信息的方式将其更改为任何键/值)。<

对于那种特定情况,get_posts 并不是很好用 - 使用 WPDB 查询数据库会给你更多的灵 active 。

$posts = $wpdb->get_results(
    "SELECT DISTINCT $wpdb->posts.* 
    FROM $wpdb->posts, $wpdb->postmeta
        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.ID = $wpdb->postmeta.post_id AND
        (
            ($wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id NOT IN(2))
            OR
            ($wpdb->postmeta.meta_key = 'featured' AND $wpdb->postmeta.meta_value = 1)
        )
    ORDER BY $wpdb->posts.post_date DESC
    LIMIT 4"
);

如果您遇到任何问题请告诉我,因为这是一个未经测试的查询。

关于如果只有一个特定类别,则 wordpress 从循环中排除帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32696748/

相关文章:

javascript - 如何获取 masonry 和图像以与Wordpress一起使用

WordPress 和 BuddyPress 垃圾邮件预防

css - WordPress 主题 : Box jumping in chrome

php - 移动 WordPress 后,可以登录,但不再有管理员访问权限

php - WordPress Widget API 中的表单归档是否需要 get_field_id()?

php - 如何在.php文件中使用jquery脚本?

php - 检索数据库表名并打印出来

php - 使用新的 wp_query 将 sql 查询转换为 wordpress 查询

html - 如何将 ul 显示为内联 block ?

wordpress - Recaptcha 阻止访问我的 WordPress 编辑器