注释尚未设置的键的META_QUERY

时间:2013-10-17 作者:ScruffyDan

我需要查询帮助!

我想建立一个meta_query (用于get_comments) 对于尚未设置的关键点。

我有一些代码,允许版主向个人评论添加自定义元键。单击复选框,元键设置为shadow, 松开它,元键设置为空字符串。

这意味着注释有三种可能的状态。它可以具有“shadow”元键,也可以具有空字符串和元键,或者无法设置元键。

我想做的是查询所有未设置此元键或元键不为shadow的注释。选择元键不相等的所有注释相当容易shadow 但我还没有找到一个也可以选择没有设置元键的注释的方法。

这是我正在使用的代码,但它不起作用。它选择设置了元键的每个注释,而不管它设置为什么。

            $comments = get_comments( array( 
                \'meta_query\' => array(
                    \'relation\' => \'OR\',
                    array( // Select comments that don\'t have the \'shadow\' p3_comment_status meta
                        \'key\' => \'p3_comment_status\',
                        \'value\' => \'shadow\',
                        \'compare\' => \'!=\'
                    ),
                    array( // Select comments that don\'t have the p3_comment_status set
                        \'key\' => \'p3_comment_status\',
                        \'compare\' => \'NOT EXISTS\'
                    )
                )
                )
            );
任何帮助都将受到感谢。

谢谢

UPDATE: 请记住,这是最终对我起作用的代码:

            $comments = get_comments( array( 
                \'order\' => \'ASC\',
                \'post_id\' => get_the_ID(),
                \'meta_query\' => array(
                    \'relation\' => \'OR\',
                    array( // Select comments that don\'t have the \'shadow\' p3_comment_status meta
                        \'key\' => \'p3_comment_status\',
                        \'value\' => \'shadow\',
                        \'compare\' => \'!=\'
                    ),
                    array( // Select comments that don\'t have the p3_comment_status set
                        \'key\' => \'p3_comment_status\',
                        \'compare\' => \'NOT EXISTS\',
                        \'value\' => \'\'
                    )
                )
            ) );
关键是\'post_id\' => get_the_ID()

2 个回复
最合适的回答,由SO网友:ScruffyDan 整理而成

请记住,这是最终对我起作用的代码:

            $comments = get_comments( array( 
                \'order\' => \'ASC\',
                \'post_id\' => get_the_ID(),
                \'meta_query\' => array(
                    \'relation\' => \'OR\',
                    array( // Select comments that don\'t have the \'shadow\' p3_comment_status meta
                        \'key\' => \'p3_comment_status\',
                        \'value\' => \'shadow\',
                        \'compare\' => \'!=\'
                    ),
                    array( // Select comments that don\'t have the p3_comment_status set
                        \'key\' => \'p3_comment_status\',
                        \'compare\' => \'NOT EXISTS\',
                        \'value\' => \'\'
                    )
                )
            ) );
关键是\'post_id\' => get_the_ID()

SO网友:s_ha_dum

你不需要三种状态。逻辑上,您有“set”和“unset”。不要把事情复杂化。选中此框后,添加p3_comment_status. 取消选中时,请删除该键。如果你这样做,你所需要做的就是使用EXISTS/NOT EXISTS. 这使得查询更简单、更快,这是一个额外的好处。

您尚未发布保存数据的代码,因此无法提供详细答案,但delete_comment_meta 可能是你需要的。

结束