首页 > 解决方案 > 如何在 Elementor 中编写自定义帖子查询,以获取由多个动态分类过滤的自定义帖子类型的帖子?

问题描述

我们正在使用 Elementor Pro 和一个名为 CPT UI 的插件。

我们有一个内置的“帖子”和一个名为“交易”的自定义帖子类型(它的 slug 是deals-offers。)

两者都共享用 Snippets 编写的相同自定义分类法。这是分类法的一个例子。

    function cptui_register_my_taxes_deal_retailers() {

    /**
     * Taxonomy: Deals Retailers.
     */

    $labels = [
        "name" => __( "Deals Retailers", "mysite-child-theme" ),
        "singular_name" => __( "Deals Retailer", "mysite-child-theme" ),
    ];

    
    $args = [
        "label" => __( "Deals Retailers", "mysite-child-theme" ),
        "labels" => $labels,
        "public" => true,
        "publicly_queryable" => false,
        "hierarchical" => false,
        "show_ui" => true,
        "show_in_menu" => true,
        "show_in_nav_menus" => true,
        "query_var" => true,
        "rewrite" => [ 'slug' => 'deal-retailers', 'with_front' => true, ],
        "show_admin_column" => false,
        "show_in_rest" => true,
        "rest_base" => "deal-retailers",
        "rest_controller_class" => "WP_REST_Terms_Controller",
        "show_in_quick_edit" => false,
        "show_in_graphql" => false,
    ];
    register_taxonomy( "deal-retailers", [ "post", "deals-offers" ], $args );
}
add_action( 'init', 'cptui_register_my_taxes_deal_retailers' );

像上面的方法一样,我们有这些分类法:deal-retailers, deal-brands, deal-events, deal-products, deal-countries.

以上 5 种分类法与“帖子”和“交易”CPT 有关。我们正在努力实现的是在帖子上列出交易清单。例如,我们在“交易”CPT 中有许多监控交易,我们有一个帖子显示来自“交易”CPT 的所有相关监控交易,具体取决于 5 个分类法。

在单个帖子中,我们使用此设置将相关交易拉入文章中。 截图 1

在每笔交易中,我们都有此设置,以便过滤器对交易文章起作用。 截图 2

我们曾经使用一个名为 Crocoblock Jet Engine 的插件,他们有一个列表网格小部件,我们可以添加自定义帖子查询,因此我们只需添加%current_terms%到税收查询中,即可将相关交易拉入文章中。 截图 3

然而,插件太重了,我们正试图尽可能地远离繁重的插件和硬编码。

这是我们尝试过的......只是让您知道我们不是开发人员

add_action('elementor/query/deal_listing_query', function($query)
{

$post_id = get_the_ID();

$meta_query[] = [
            'post_type' => 'deals-offers',
            'taxonomy' => [ 'deal-retailers', 'deal-brands', 'deal-events', 'deal-products', 'deal-countries' ],
            'field' => 'slug',
            'value' => $post_id,
            'compare' => 'in',
];
$query->set( 'meta_query', $meta_query );
} );

再举一个例子,我们的 sinppets 之一,我们已经设法让 ACF 关系与自定义代码一起工作,如下所示。

///Single Review Product
add_action( 'elementor/query/post_review_product', function ( $query ) { $postid = get_the_ID(); $ids = get_post_meta($postid, 'post_review_product', true); if ( $ids ) { $query->set( 'post__in', $ids ); } } );

如果有人可以帮助我们,那就太好了!

标签: phpwordpresscustom-post-typeelementorcustom-taxonomy

解决方案


推荐阅读