将特定类别查询添加到wordpress中的现有MySQL查询

时间:2012-10-30 10:02:09

标签: php mysql wordpress

我仍处于MySQL的初级阶段,我想知道如何为此添加特定类别。

SELECT DISTINCT DATE_FORMAT(post_date, '%b') AS month , 
  MONTH(post_date) as numMonth, YEAR( post_date ) AS year, 
  COUNT( id ) as post_count 
FROM $wpdb->posts 
WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'post' 
GROUP BY month , year ORDER BY post_date DESC

我找到了这个代码来获取类别uncategorized ...

SELECT * FROM wp_posts p 
LEFT OUTER JOIN wp_term_relationships r ON r.object_id = p.ID     
LEFT OUTER JOIN wp_terms t ON t.term_id = r.term_taxonomy_id 
WHERE p.post_status = 'publish' AND p.post_type = 'post' 
  AND t.slug = 'uncategorized'

我尝试了UNION ALL,但这样就不会出现任何问题。如果我试图学习这些东西,也许我已经走得太远了,因为我似乎无法让第二位查询自行完成。

由于

编辑:为了回应第一个回复,我添加了这段代码来进一步解释我在做什么,这是一个档案小部件,每年都会显示一次。我还没有找到一种简单的方法,并采用了“更好的档案小部件”。这是他们在我们想要改变的文件中包含的代码。如果有更简单的方式使用query_posts我可以对此开放。

global $wpdb;
    $prevYear = "";
    $currentYear = "";
    if ( $months = $wpdb->get_results( "SELECT DISTINCT DATE_FORMAT(post_date, '%b') AS month , MONTH(post_date) as numMonth, YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'post' GROUP BY month , year ORDER BY post_date DESC" ) ) {
    echo '<ul>';
        $count = 0;
        foreach ( $months as $month ) {

            $currentYear = $month->year;
            if ( ( $currentYear != $prevYear ) && ( $prevYear != "" ) ) { echo "</ul></li>"; }
            if ( $currentYear != $prevYear ) {  
             $count++ ?> 
            <li class="baw-year"><a href="<?php echo get_year_link( $month->year ); ?>"><?php echo $month->year; echo ' ('.$month->post_count . ')' ; ?> </a>
            <ul class="baw-months">
            <?php
            }   ?>
            <li class="baw-month"><a href="<?php echo get_month_link( $month->year, $month->numMonth ); ?>"><?php echo date('F', strtotime ($month->month)); ?><?php /*echo ' ' . $month->year;  */ ?></a></li>
            <?php
            $prevYear = $month->year;
        }//end foreach
    }
    ?>
    </ul></li>

2 个答案:

答案 0 :(得分:0)

您是否有理由不使用query_posts()? (您可以在查询中使用的参数是here。)使用query_posts更安全一些(并且已经内置到WordPress中) - 使用这样的自定义查询,您需要确保使用$ wpdb- &gt;准备等,以确保不能注入查询。但是使用query_posts,您可以添加分类,发布类型,发布状态,订单,日期/时间等,并为您编写查询并提取您需要的内容。

答案 1 :(得分:-1)

  1. 尝试使用此代码显示类别帖子 -

    get_results( “ SELECT * FROM $ wpdb-&gt;帖子 LEFT JOIN $ wpdb-&gt; term_relationships ON ($ wpdb-&gt; posts.ID = $ wpdb-&gt; term_relationships.object_id) LEFT JOIN $ wpdb-&gt; term_taxonomy ON ($ wpdb-&gt; term_relationships.term_taxonomy_id = $ wpdb-&gt; term_taxonomy.term_taxonomy_id) 在哪里$ wpdb-&gt; posts.post_status ='发布' AND $ wpdb-&gt; term_taxonomy.taxonomy ='category' AND $ wpdb-&gt; term_taxonomy.term_id = 3 **(您的类别ID)** ORDER BY post_date ASC “ ); ?&GT;
  2. 您可以在“term_taxonomy.term_id”中查看“wp_terms”表,即。您的 类别ID。

  3. 此外,您可以点击下面的编辑按钮获取您的类别ID 管理面板中的特定类别名称,您将在中看到ID 网址。