如何在 Wordpress 中编写自定义查询以获取由动态分类法过滤的自定义帖子类型

问题描述

简介

我是一名平面设计师,对 PHP 一无所知,但在这种特殊情况下我需要亲自动手,我需要编码之神的帮助。 我一直在努力解决这个问题,阅读它并尝试一些东西,但我可能太菜了,无法弄清楚。

工具包

我有一个 wordpress 网站,我正在使用 Elementor Pro 来构建它。 我正在使用插件“CPT-UI”来拥有我自己的自定义帖子类型,以及“CPT-onomies”来使用一个 CPT 作为另一个 CPT 的分类法。 如果我能够在“片段”插件中编写它,我可以从 Elementor 调用自定义查询

情况

话虽如此,我将准确描述正在发生的事情: 我有一个“项目”CPT 和一个“设计”CPT,两者都是 CPT。同时,“项目”是与“设计”相关的分类法,这意味着我可以将属于同一个大“项目”的许多设计分组。 例如,如果我设计了可口可乐的标志并设计了带有该标志的名片,那么这两种设计都将被归入名为“新可口可乐标识”的分类法(也是 CPT)中。 因此,在“New Coca Identity”页面(实际上是应用于所有“项目”的动态模板)中,我可以获取所有将当前循环 ID(在本例中为“New Coca Identity”)指定为其分类法的设计。

应该是这样的(我相信)

这就是我想出来的......

// Create the action to call this query from Elementor
add_action('elementor_pro/posts/query/projects_designs_query',function($query)
{

// Get current Meta Query
    $Meta_query = $query->get( 'Meta_query' );

// If there is no Meta query when this filter runs,it should be initialized as an empty array.
    if ( ! $Meta_query ) {
        $Meta_query = [];
    }

// Append our Meta query
    $tax_query[] = [
        'taxonomy' => 'projects','field' => 'term_id','terms' => 'HERE SHOULD BE THE DYNAMIC ID I GUESS',];
    $query->set( 'Meta_query',$Meta_query );
} );

解决方法

我成功了!我将分享我是如何做的,以防其他人像我一样缺乏 php 知识。

add_action('elementor_pro/posts/query/projects_designs_query',function($query)
{

$post_id = get_the_ID();

$meta_query[] = [
            'post_type' => 'designs','taxonomy' => 'projects','value' => $post_id,'compare' => 'in',];
$query->set( 'meta_query',$meta_query );
} );

这样做的目的是首先获取循环中当前帖子的 ID(在我的例子中是项目自定义帖子类型)。然后它获取属于同一项目(当前帖子)的所有帖子(具有自定义帖子类型设计)。