如何从查询中消除特定类别

时间:2009-07-26 12:16:11

标签: php html wordpress

我收到了这段代码。该代码显示数据库中最新10个WordPress帖子的标题标题。我需要做的是从中消除一个特定的类别。有人可以帮忙吗?

<?php require_once 'news/wp-config.php';
                    $howMany = 0;
                    $query ="SELECT `ID`, `post_title`,'post_category', `guid`,SUBSTRING_INDEX(`post_content`, ' ', 100) AS `post_excerpt` FROM $wpdb->posts WHERE `post_status`= \"publish\" AND `post_type` = \"post\" ";
                    $posts = $wpdb->get_results($query);
                    $posts = array_reverse($posts);
                    foreach($posts as $post)
                    {
                            if($howmany<10)
                            {
                                $link = $post->guid;
                                echo "<li><a target='_blank' href='$link'>$post->post_title</a></li>";
                                $howmany++;
                            }   

                    }


                    ?>

5 个答案:

答案 0 :(得分:0)

确定您不需要的类别,并在WHERE子句中添加额外的AND:

AND post_category != 3

答案 1 :(得分:0)

你可以在2个地方做到。最有效的方法是在查询中执行此操作:

 $query ="SELECT ID, post_title, post_category, guid, SUBSTRING_INDEX(post_content, ' ', 100) AS `post_excerpt` 
FROM $wpdb->posts 
WHERE post_status= 'publish' 
  AND post_type = 'post' 
  AND post_category!= 'unwanted string' ";

另一个地方,如果由于某种原因你需要所有的结果,但你想在其他地方使用不需要的类别,就是在你检索结果时:

if($howmany<10 && post['post_category']!='unwanted string') {

答案 2 :(得分:0)

  

'Noticeboard'是我要消除的类别的名称。但如果我这样写,那就显示出一个解析错误。

因为您必须在查询中插入类别ID,而不是类别名称 为此,只需在数据库wp_categories表中查看。

关于wordpress数据库的一些链接:
http://blog.kapish.co.in/2008/01/18/wordpress-database-schema/
http://wpbits.wordpress.com/2007/08/08/a-look-inside-the-wordpress-database/

无论如何,我认为这比这更难。看看post2cat表。 所以,你必须做一个子查询。

答案 3 :(得分:0)

我不确定您使用的是哪个WP版本,因此这个'回答'有一些注意事项。

警告1:这不是一个完整的答案,更像是一个指针

警告2:下面的查询适用于WP 2.8.x,因此YMMV

下面的查询显示了如何将帖子链接回其类别。您可以使用NOT IN mySQL运算符通过其ID

排除您不想要的类别
SELECT
    wp_posts.*
FROM
    wp_posts
INNER JOIN
    wp_term_relationships
ON
    (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN
    wp_term_taxonomy
ON
    (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
WHERE
    wp_term_taxonomy.taxonomy = 'category'
AND
    wp_term_taxonomy.term_id NOT IN ('3')
AND
    wp_posts.post_type = 'post'
AND
    (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'future')
GROUP BY
    wp_posts.ID
ORDER BY
    wp_posts.post_date
DESC

换行和缩进是特殊的,但(希望)可以让您更轻松地查看此查询的内容。

我希望这会有所帮助。

答案 4 :(得分:0)

或者,您可以使用第二个循环,如下所示:

<div>
    <h3>Fresh Posts</h3>
    <ul>
    <?php
        $my_query = new WP_Query("cat=-3&order=DESC&posts_per_page=10");

        echo "<pre>"; print_r($my_query->query_vars); echo "</pre>"; // shows the variables used to parse the query
        echo "<code style='width: 175px;'>"; print_r($my_query->request); echo "</code>"; // shows the parsed query

    while ($my_query->have_posts()) : $my_query->the_post(); //standard loop stuff
    $do_not_duplicate[] = $post->ID;?>

        <li id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>

    <?php endwhile; ?>
    </ul>
</div>
再次WP 2.8.x.这里有很多好消息:WordPress loop documentation