当前位置: 首页 > 知识库问答 >
问题:

按关系字段(ACF)自定义查询筛选元素帖子

李捷
2023-03-14

我有一个自定义后类型设置称为艺术家。每个单个艺术家是一个页面(艺术家个人资料,如果你愿意),有一个通过高级自定义字段(ACF)的关系字段类型与该艺术家相关联的产品列表。我需要产品在艺术家页面上显示在他们的类别中。因此,在Elementor中,我需要指定一个查询筛选器ID,以简单地将产品划分为类别。

到目前为止我所尝试的

我试图通过自定义查询仅显示列表中特定类别的产品,因为我需要生成查询ID。

我一直在尝试各种不同的方法来做到这一点,但现在我不知所措。我的最新代码在这里。。。我错过了什么?

/** Product category 'SOFTWARE' **/
add_filter( 'software_product', 'product_category_software' );

function product_category_software( $variable ) {

    $query_args = array(
       'post_type' => 'product',
       'tax_query' => array(
            array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms'    => 'software', 
            ),
        ),
     );
return $variable;
}

共有1个答案

饶铭
2023-03-14

你需要用这个

https://developers.elementor.com/custom-query-filter/#Using_the_Custom_Filter

任意\u名称\u查询\u id-您在Elementor字段中填写的查询id,

要放在functions.php中的代码:

add_action( 'elementor/query/arbitrary_name_query_id', function( $query ) {
    $meta_query = $query->get( 'meta_query' ); 
    $meta_query[] = [ 
        'key' => 'acf_key', // put ACF relationship field name 
        'value' => get_the_ID(), 
        'compare' => '=', 
    ]; 
    $query->set( 'meta_query', $meta_query ); 
} ); 

首先,作为WordPress文档过滤器说:

它们(即过滤器)为函数提供了修改其他函数数据的方法。

这意味着过滤器功能,在本例中是产品类别软件,接收随后修改并返回的数据:

add_filter( 'software_product', 'product_category_software' );
function product_category_software( $variable ) { // receive $variable

    /**
     * Modify $variable here
     */

    return $variable; // return modified $variable
}

在您的情况下product_category_software不会修改接收的内容,而是引入了新的数据和平$query_args,这没有意义,因为它不会被返回。

其次,add\u filter函数的第一个参数应该是一个现有的过滤器名称,software\u product不是。

再次,产品类别分类法的正确名称是product_cat

Aproach#1使用pre#u get_posts修改主查询

function your_arbitrary_name( $query ) { // receive
    if ( ! is_admin() && is_post_type_archive( 'product' ) && $query->is_main_query() ) {
        $tax_query = array(
            array(
                'taxonomy' => 'product_cat',
                'field' => 'slug',
                'terms' => array('software'),
            )
        );

        $query->set( 'meta_query', $tax_query ); // modify
    }
    return $query; // and return
}
add_action( 'pre_get_posts', 'your_arbitrary_name', 20 );

使用wc_get_productsWC_Product_Query

例如,在控制器甚至模板中使用:

$args = array(
    'category' => array( 'software' ),
);
$products = wc_get_products( $args );

阅读有关wc_获取_产品和wc_产品查询的文档

 类似资料:
  • 我正在使用高级自定义字段插件,我试图通过分类字段过滤一些自定义帖子,修改WP_Query: 如果我尝试通过文本字段过滤一切正常,WP_Query被修改。但是当字段是一个分类法字段时,我不知道应该传递什么参数,因为它是一个对象。我尝试了分类法名称和分类法ID,但不起作用。 是否可以通过分类字段进行筛选?我应该传递的什么参数?谢谢! 更新-结构: 自定义帖子:“递归操作系统” 自定义分类Slug:'r

  • 我有一个前端ACF表单-ACF_表单()。使用post对象字段。我想通过自定义字段限制查询结果。下面的代码可以正常工作,除了当我尝试在搜索栏中键入时,会出现以下错误:我得到的错误是ajax响应中的PHP错误; 0:“PhpConsole\Handler”- 1:"strpos()" 2:"acf_order_by_search()" 3:“acf_field_post_object- 4:“acf

  • 我有一个自定义的职位类型,这是一个供应商的个人资料页排序。在每一页的末尾,我都有一个产品小部件,它应该显示这个供应商的产品。 所有产品都被分配到供应商特定的类别。因此供应商A的个人资料页面应显示分配给product_catA的所有产品。 相应的产品类别由每个配置文件页面上的acf字段指定。因此,我的自定义筛选查询需要获取指定的产品目录,然后按该类别筛选所有产品。我正在努力研究如何将帖子中的自定义字

  • 我知道你可以设置自定义查询与元素插件,但只有少数小部件支持这个f. e.后小部件。但是我想设置一个自定义查询与"Archive Post"-元素的小部件。 我想把我所有的帖子按年份分组。(每一行的顶部还应显示年度名称) 你知道怎么做吗?也许通过改变php代码本身?Elementor的php代码在哪里?

  • 我使用ACF,有一个名为“关于”的页面模板,我的“关于我们”页面使用该模板。我还有一个主页模板,它使用我的“主页字段组”中的字段。我的“关于我们”页面显示“关于字段组”中的ACF字段以及我的“主页字段组”中的一些字段。 我从我的主页组通过引用以下php代码的ACF字段得到字段: 来自主页上的主页字段组,段落来自我的关于我们页面介绍字段,来自关于字段组。 我想做一些类似的事情,但从自定义帖子类型(不

  • 我希望有人能帮我创建我需要的查询。我引用这个留档的元素或额外的小部件,“额外的帖子”:https://developers.elementor.com/custom-query-filter/ 现在,我可以在编辑器中设置查询以显示来自多个类别的帖子。问题是,查询显示来自“红色”或“蓝色”的帖子。我需要查询来显示标记为“红色”和“蓝色”的帖子。 我使用自定义帖子类型和自定义类别,这似乎是有意义的例子