首页 文章

自定义$ wpdb由Taxonomy Meta过滤的帖子

提问于
浏览
1

在复杂的设置上工作,我们在具有不同前缀的同一数据库上安装了2个单独的Wordpress .

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

由于我主要使用内置的WP函数,因此我的SQL变得有点生疏了 .

在网站A上我使用get_terms使用元查询循环分类,然后对每个帖子进行另一个查询 .

在网站B上我想做一个自定义的$ wpdb查询并让它几乎在我检查post meta值然后按照分类名称排序,如下所示:

$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);

我遇到的一个主要问题是也能够按分类法元值过滤,并且某些类别不应显示 .

所以我一直在尝试在分类法元表上做另一个INNER JOIN,但是我遇到了问题而没有得到预期的结果:

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' )

任何建议都非常感谢 .

1 回答

  • 0

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

    因此,此代码通过post meta和taxonomy过滤,然后按分类 Headers 对帖子进行排序 .

    注意:在我的SQL上解决生锈问题,更容易命名对Joins的特定调用和额外的meta等,以便更容易提取和识别 .

    $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)
    ";
    

相关问题