使用ACF中继器字段的WP GET_POST META_QUERY

时间:2021-03-30 作者:revive

我有一个自定义的帖子类型“ITEM”,允许管理员使用ACF文本字段添加“ITEM Number”。

在另一种自定义的“组”Post类型中,管理员可以使用ACF转发器输入多个“项目编号”,以便“项目”与此组关联。我需要循环来显示所有具有“项目编号”的帖子,该编号与在组页面上输入到转发器的编号相匹配。

我正在使用get\\u posts()查询组页面,以显示与组管理页面中输入的数字之一匹配的所有项目帖子。

它正在失败。我是在meta\\U查询中使用meta\\U值还是meta\\U查询。

首先,我必须将ACF中继器的阵列压缩展平,因为它呈现一个嵌套阵列。然后,我必须将该数组转换为值,以便将其传递给“meta\\u query”中的“value”。

以下是我目前掌握的情况:

        // get the ACF field array
        $arrays = get_field(\'included_inventory\');

// outputs: 
Array
(
    [0] => Array
        (
            [item_number] => 5550
        )

    [1] => Array
        (
            [item_number] => 5551
        )

    [2] => Array
        (
            [item_number] => 5552
        )

    [3] => Array
        (
            [item_number] => 1234
        )

)

        // setup array
        $result = array();

        // flatten the array
        $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arrays));
        
        // get the values
        foreach ($it as $key => $value) {
          $result[] = strval($value);
        }

// outputs:
Array
(
    [0] => 5550
    [1] => 5551
    [2] => 5552
    [3] => 1234
)

        // format the values                            
        $results = "\'" . implode("\',\'", $result) . "\'";

// outputs: \'5550\',\'5551\',\'5552\',\'1234\'
        
        $posts = get_posts( array(
            \'post_type\' => \'liquidation\',
            \'posts_per_page\' => 10,
            \'orderby\' => \'date\',
            \'order\' => \'DESC\',
            \'meta_key\' => \'item_number\',
            \'meta_query\' => array(
                array(
              \'key\'     => \'item_number\',
              \'value\'   => array($results), // needs to be formatted as array(\'number\',\'number\',\'etc\')
              \'compare\' => \'IN\'
               )
            )
        ));
我肯定我只是忽视了一些简单的事情。。但是,我已经盯着这个看太久了。。看不到通过了,哈哈。

我要么没有收到帖子,要么出现“警告:trim()期望参数1为字符串”错误

1 个回复
SO网友:revive

这不是一个直接的答案,因为我的解决方案是以另一种方式实现这一点。

我没有从主页ACF字段中获取值(数组),而是在要显示的每个页面中添加了一个日期字段。因此,我根据该日期(针对每个页面)进行查询,而不是在主页上输入要显示的页面列表。

            <?php
            global $post;
            $today = date("Ymd");
            $myposts = get_posts( array(
                \'post_type\' => \'liquidation\',
                \'posts_per_page\' => 5,
                \'meta_key\' => \'active_till\',
                \'orderby\' => \'meta_value\',
                \'order\' => \'ASC\',
                \'meta_query\' => array(
                    array(
                        \'key\'           => \'active_till\',
                        \'compare\'       => \'>=\',
                        \'value\'         => $today,
                        \'type\'          => \'DATE\',
                    ),
                ),
            ));

            if ( $myposts ): ?>

                    <?php foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
and so on...

相关推荐