Php 按分类法筛选的自定义$wpdb帖子

Php 按分类法筛选的自定义$wpdb帖子,php,mysql,wordpress,Php,Mysql,Wordpress,在一个复杂的设置中,我们在同一个数据库上安装了两个不同前缀的Wordpress 我需要对站点A和站点B的产品进行一些查询 我的SQL有些生疏,因为我主要使用内置的WP函数 在站点A上,我使用get_术语,使用元查询循环遍历分类法,然后对每个分类法的帖子进行另一个查询 在站点B上,我想进行1次自定义$wpdb查询,并在检查post元值,然后按分类名称排序的情况下使其几乎正常工作,如下所示: $querystr = " SELECT $tsm_posts.*, $siteA_terms.nam

在一个复杂的设置中,我们在同一个数据库上安装了两个不同前缀的Wordpress

我需要对站点A和站点B的产品进行一些查询

我的SQL有些生疏,因为我主要使用内置的WP函数

在站点A上,我使用get_术语,使用元查询循环遍历分类法,然后对每个分类法的帖子进行另一个查询

在站点B上,我想进行1次自定义$wpdb查询,并在检查post元值,然后按分类名称排序的情况下使其几乎正常工作,如下所示:

 $querystr = "
  SELECT $tsm_posts.*, $siteA_terms.name, $siteA_terms.slug, tax2.description
  FROM $siteA_posts, $siteA_postmeta
  INNER JOIN {$siteA_term_relationships} AS rel2 ON $siteA_postmeta.post_id = rel2.object_id
  INNER JOIN {$siteA_term_taxonomy} AS tax2 ON rel2.term_taxonomy_id = tax2.term_taxonomy_id
  INNER JOIN {$siteA_terms} USING (term_id)
  WHERE $siteA_posts.ID = $siteA_postmeta.post_id
  AND $siteA_postmeta.meta_key = 'siteB_product'
  AND $siteA_postmeta.meta_value = 'yes'
  AND $siteA_posts.post_status = 'publish'
  AND $siteA_posts.post_type = '" . SP_PRODUCTS . "'
  AND $siteA_posts.post_parent = '0'
  GROUP BY rel2.object_id
  ORDER BY GROUP_CONCAT({$siteA_terms}.name ORDER BY name ASC)";
  $siteA_products = $wpdb->get_results($querystr, OBJECT);
我面临的一个主要问题是,还能够通过分类法元值进行过滤,并且某些类别不需要显示

因此,我一直在尝试对taxonomy meta表进行另一次内部联接,但我遇到了问题,没有得到预期的结果:

  INNER JOIN {$siteA_termmeta} AS taxMeta ON ( taxMeta.term_id = rel2.term_taxonomy_id AND taxMeta.meta_key = 'product_category_main' AND taxMeta.meta_value = 'YES' )

非常感谢您的任何建议。

因此,分类法元仍然存在问题,但我能够通过限制分类法本身来实现我所追求的结果,并清理了代码,为所需的post元添加了特定调用,以防任何人发现它有用:)

因此,这段代码按帖子元和分类法进行过滤,然后按分类法标题对帖子进行排序

注意:去掉我的SQL上的锈迹,命名特定的连接调用和额外的元等更容易,从而更容易提取和识别

$query = "
SELECT p.ID, p.post_title, p.post_content,
fi_id.meta_value AS featured_id, taxable.meta_value AS taxable,
producer.name AS producer_name, producer.slug AS producer_slug, producer_tax.description AS producer_description
FROM {$siteA_posts} p
LEFT JOIN {$siteA_postmeta} fi_id ON fi_id.post_id = p.ID AND fi_id.meta_key = '_thumbnail_id'
LEFT JOIN {$siteA_postmeta} taxable ON taxable.post_id = p.ID AND taxable.meta_key = 'taxable'
LEFT JOIN {$siteA_postmeta} loc ON loc.post_id = p.ID AND loc.meta_key = 'location_loftbox'
INNER JOIN {$siteA_term_relationships} AS rel2 ON loc.post_id = rel2.object_id
INNER JOIN {$siteA_term_taxonomy} AS producer_tax ON rel2.term_taxonomy_id = producer_tax.term_taxonomy_id AND producer_tax.taxonomy = 'producers'
INNER JOIN {$siteA_terms} AS producer USING (term_id)
WHERE p.ID = loc.post_id
AND loc.meta_key = 'siteB_product'
AND loc.meta_value = 'yes'
AND p.post_status = 'publish'
AND p.post_type = 'products'
AND p.post_parent = '0'
GROUP BY rel2.object_id
ORDER BY GROUP_CONCAT(producer.name ORDER BY name ASC)
";

因此,分类法元仍然存在问题,但我能够通过限制分类法本身来实现我所追求的结果,并清理了代码,为所需的post元添加了特定调用,以防任何人发现它有用:)

因此,这段代码按帖子元和分类法进行过滤,然后按分类法标题对帖子进行排序

注意:去掉我的SQL上的锈迹,命名特定的连接调用和额外的元等更容易,从而更容易提取和识别

$query = "
SELECT p.ID, p.post_title, p.post_content,
fi_id.meta_value AS featured_id, taxable.meta_value AS taxable,
producer.name AS producer_name, producer.slug AS producer_slug, producer_tax.description AS producer_description
FROM {$siteA_posts} p
LEFT JOIN {$siteA_postmeta} fi_id ON fi_id.post_id = p.ID AND fi_id.meta_key = '_thumbnail_id'
LEFT JOIN {$siteA_postmeta} taxable ON taxable.post_id = p.ID AND taxable.meta_key = 'taxable'
LEFT JOIN {$siteA_postmeta} loc ON loc.post_id = p.ID AND loc.meta_key = 'location_loftbox'
INNER JOIN {$siteA_term_relationships} AS rel2 ON loc.post_id = rel2.object_id
INNER JOIN {$siteA_term_taxonomy} AS producer_tax ON rel2.term_taxonomy_id = producer_tax.term_taxonomy_id AND producer_tax.taxonomy = 'producers'
INNER JOIN {$siteA_terms} AS producer USING (term_id)
WHERE p.ID = loc.post_id
AND loc.meta_key = 'siteB_product'
AND loc.meta_value = 'yes'
AND p.post_status = 'publish'
AND p.post_type = 'products'
AND p.post_parent = '0'
GROUP BY rel2.object_id
ORDER BY GROUP_CONCAT(producer.name ORDER BY name ASC)
";