从wp_post检索类别的MySQL查询

时间:2017-05-21 作者:bbruman

使用此查询检索具有特定post_type

SELECT *
FROM wp_posts
WHERE post_type = \'product\';
如上所述here 类别不在wp_posts 表但术语表wp_terms wp_term_relationships wp_term_taxonomy

在所有表格中搜索我脑海中的一个类别,我能找到的唯一一个类别实例是wp_terms 包含以下列的表

在其他表格中寻找与此相关的交叉引用,并以某种方式将其与wp\\U帖子联系起来,这带来了一些复杂性。

我的想法是term_id 我应该寻找外键,但唯一的例子是wp_term_taxonomy, 我能在表格中找到的唯一与我的类别相关的信息(或者更确切地说term_id) 是

因此,我能从中获得的唯一信息是让我知道term_id taxonomy 是一个product_cat 并且在count 告诉我这个特定类别有多少帖子。

了解一点MySQL,我知道如果有希望这样做,我需要修改我的查询并执行JOIN 或者两个。

但我只能找到非常有限的信息,确切地说我能抓住什么。

以下是wp_posts

 `wp_posts` (
 `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 `post_author` bigint(20) unsigned NOT NULL DEFAULT \'0\',
 `post_date` datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\',
 `post_date_gmt` datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\',
 `post_content` longtext COLLATE utf8mb4_unicode_520_ci NOT NULL,
 `post_title` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
 `post_excerpt` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
 `post_status` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT \'publish\',
 `comment_status` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT \'open\',
 `ping_status` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT \'open\',
 `post_password` varchar(255) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT \'\',
 `post_name` varchar(200) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT \'\',
 `to_ping` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
 `pinged` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
 `post_modified` datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\',
 `post_modified_gmt` datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\',
 `post_content_filtered` longtext COLLATE utf8mb4_unicode_520_ci NOT NULL,
 `post_parent` bigint(20) unsigned NOT NULL DEFAULT \'0\',
 `guid` varchar(255) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT \'\',
 `menu_order` int(11) NOT NULL DEFAULT \'0\',
 `post_type` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT \'post\',
 `post_mime_type` varchar(100) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT \'\',
 `comment_count` bigint(20) NOT NULL DEFAULT \'0\',
 PRIMARY KEY (`ID`),
 KEY `post_name` (`post_name`(191)),
 KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
 KEY `post_parent` (`post_parent`),
 KEY `post_author` (`post_author`)
 )
是否可以将我的查询修改为仅检索wp_posts 特定类别的表行?

4 个回复
最合适的回答,由SO网友:bbruman 整理而成

找到了答案@如果您希望在WordPress中实现这一点,belinus可能是您的解决方案。

至于您可以使用的原始SQL查询,我找到了这个查询,对它进行了一点修改,它返回特定类别的所有产品。

执行此操作需要三个表wp_posts wp_term_relationshipswp_term_taxonomy

SELECT *
FROM wp_posts
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_term_taxonomy.term_id IN (307)
GROUP BY wp_posts.ID
只需更换307 使用term_id 您希望获得结果的类别。您可以通过在wp_terms name 列,它将返回关联的术语id。

如果愿意,也可以返回多个类别,只需在WHERE 例如,子句WHERE wp_term_taxonomy.term_id IN (307, 450, 200, 99).

SO网友:Cedon

可以使用WP_Query 班如果你想要的只是根据类别抓取所有帖子,那么你可以使用ID或slug。

$args = array(
   \'cat\' => 1,
);

$new_query = new WP_Query( $args );

$args = array(
   \'cat_name\' => \'news\',
);

$new_query = new WP_Query( $args );
从此处,您可以正常写入循环,但有一个例外:

<?php if ( $new_query->have_posts() ) : ?>
   <?php while ( $new_query->have_posts() ) : $new_query->the_post(); ?>
      // Post Code Goes Here
   <?php endwhile; ?>

   <?php wp_reset_postdata(); ?>

<?php else : ?>
    // No Posts Found
<?php endif; ??
您需要包括wp_reset_postdata(); 将重置global $post; 返回到主查询的值。

SO网友:Deepak Sharma

我创建了一个查询,您可以使用它来查找与

SELECT *  FROM wpra_term_relationships 
INNER JOIN wpra_term_taxonomy ON (wpra_term_taxonomy.term_taxonomy_id=wpra_term_relationships.term_taxonomy_id AND wpra_term_taxonomy.taxonomy=\'category\')
INNER JOIN wpra_terms ON (wpra_terms.term_id=wpra_term_taxonomy.term_id )
WHERE object_id=\'273960\'
只需将273960替换为您的帖子ID

SO网友:ronaldoguedess

谢谢Deepak Sharma,通过你的帖子,我可以做我想做的事!我做了一些修复工作。我试着喜欢你的评论,但我不能,因为我没有足够的分数!

SELECT * FROM wp_term_relationships INNER JOIN wp_term_taxonomy ON (wp_term_taxonomy.term_taxonomy_id=wp_term_relationships.term_taxonomy_id AND wp_term_taxonomy.taxonomy=\'product_cat\') INNER JOIN wp_terms ON (wp_terms.term_id=wp_term_taxonomy.term_id ) WHERE object_id=\'61170\'

结束

相关推荐

WP_query issue with no posts

我正在将表单用于存档页面,以便用户可以指定他们想要查看的帖子以及查看方式。我有它的设置,所以他们可以选择升序或降序,每页帖子等,使用$\\u GET在我的表单中。但是,我还设置了表格,以按年/月设置显示帖子:<select name=\"monthnum\"> <option value=\"null\">Month</option> <option value=\"1\">Janu