META_QUERY,其中键值以数组形式存储

时间:2020-04-16 作者:Kevin

我很难使此功能正常工作。我要做的是,关于特定服装项目的信息是在“Attire”自定义帖子类型中创建的。我这样做是因为许多类共享类似的服装项目,所以创建一个服装项目然后将其分配给不同的类更容易。attired的自定义字段存储如下:

   [9] => Array
    (
        [attire-id] => 5680
        [cat] => Leotard
        [gender] => girl
        [assign-classes] => Array
            (
                [0] => 5576
                [1] => 5577
            )

        [attire-name] => Lilac Skirt Eurotard 10127
    )
“分配类”存储需要特定服装项目的不同类的ID。当类出现在网页上时,我想做一个自定义查询,只检索那些类ID存储在“assign classes”中的服装项目。

这是不起作用的功能。

 function get_class_attire($id){
    $all_attire = array();
    $args = array(
        \'post_type\'     => \'attire\',
        \'meta_query\'=>array(
            array(
                \'key\'       => \'assign-classes\',
                \'value\'     => $id,
                \'compare\'   => \'IN\'
                ),
        ),
        \'numberposts\'   => -1,
    );
    $the_query = get_posts($args);

    foreach ( $the_query as $post ) : setup_postdata( $post );
        $this_attire = array(
            \'attire-id\' => $post->ID,
            \'cat\' => get_post_meta($post->ID, \'attire-category\', true),
            \'gender\' => get_post_meta($post->ID, \'gender\', true),
            \'assign-classes\' => get_post_meta($post->ID, \'assign-classes\', true),
            \'attire-name\' => get_the_title($post->ID)
        );
        array_push($all_attire, $this_attire);
    endforeach;
    wp_reset_postdata();
    return $all_attire;
}
我觉得问题是,当它进行检查时,它只看到所有“赋值类”值的数组,然后什么也不返回。我不知道如何让它查看数组中的值来进行比较。

1 个回复
SO网友:Kevin

多亏了@JacobPeattie的帮助,问题在于如何保存数据。因此,不是:

    if(isset($_POST[\'assign-classes\'])) {            
        update_post_meta( $post->ID, \'assign-classes\', $_POST[\'assign-classes\'] );
    }
现在是:

delete_post_meta($post->ID, "assign-classes");
    for($i = 0; $i < count($_POST[\'assign-classes-all\']); $i++){
        add_post_meta( $post->ID, \'assign-classes\', $_POST[\'assign-classes-all\'][$i], false );
    }
唯一奇怪的是,一开始我试着foreach 循环,循环次数不会超过一次。但是for 循环会。

相关推荐