php - 如何在 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 ); } } );
如果有人可以帮助我们,那就太好了!
解决方案
推荐阅读
- kotlin - 自定义 AlertDialog 的圆角
- java - 如何修复 lang is undefined 问题 graphql 服务器错误?
- c++ - getline 函数中的缓冲区清理
- instagram - SparkAR:进行直播时未出现已发布的 Instagram 效果
- java - 将 setContentView 与布局资源和视图一起使用的区别
- linux - gsed 无法识别 SHIFT_JIS 字符
- google-cloud-spanner - 如何在扳手中使用占位符
- java - Java 11 中带有自定义图标的 JFrame
- android - FLUTTER DOCTOR [X] Android 工具链
- java - 从Java中资源文件夹的子文件夹加载文件