如何通过自定义字段查询最大字符长度的WordPress帖子

时间:2016-09-28 作者:J-P-Dude

我对我的问题做了一些研究,但什么也没有发现。

我有一个查询,可以从特定的帖子类型中获取所有帖子,其中特定的自定义字段不是空的。但我希望相同的自定义字段具有最大字符长度。我不想删减这个值,我只想得到字符长度在1到75之间的帖子。

这是我当前的查询,它可以工作,但没有字符长度。

new WP_Query(array(
    \'post_type\' => \'experts\',
    \'posts_per_page\' => 1,
    \'meta_key\' => \'quote\',
    \'meta_value\' => \'\',
    \'meta_compare\' => \'!=\',
    \'orderby\' => \'rand\'
));

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

不,没有现成的。有其他选择,但最好的解决方案需要知道你想要这样做的原因。

例如,如果您的目标是在主页上显示完整的报价,并避免出现过大的方框,从而破坏设计,那么您可以:

一种基于CSS的解决方案,它是一种带有“在主页上显示”标签的自定义分类法(protip:这将比元查询快几个数量级)

  • 一个标签,用于指示报价是否属于某个字符长度范围,然后可以在查询中提取该长度范围,但是如果没有该信息,唯一的最佳答案是否定,WP_Query 无法执行字符串操作,只能检查其是否等于或不等于,或搜索,以及数字值的数字检查。

    也许可以使用原始SQL查询来完成,但这将是对已经很昂贵的查询的昂贵检查。更简单的查询会使整个服务器在中等负载下停机,我预计任何包含元查询的页面都会有严重的性能问题,即使没有此添加。

    我的建议:

    找出报价保存时是否过长,并添加标记,而不是在查询时,查找该标记,不要查看字符计数,不要使用随机顺序,而是尝试随机日期如果报价始终不同,则无法缓存页面,请考虑在javascript中加载多个报价,并改为在客户端进行选择,或者通过调用REST API

  • SO网友:indextwo

    我发布了this answer 关于最初的StackOverflow问题,但是:

    很高兴你找到了一个可能更有效的解决方案,我讨厌不同意mod(抱歉@TomJNowell!),但作为参考:你完全可以用WP_Query - 您只需要使用meta_compare value of REGEXP 以及适当的meta_value 作为正则表达式来查找您要查找的字符串长度:

    $args = array(
        \'post_type\'         => \'experts\',
        \'posts_per_page\'    => -1,
        \'post_status\'       => \'any\',
        \'meta_key\'          => \'quote\',
        \'meta_value\'        => \'^.{1,75}$\',
        \'meta_compare\'      => \'REGEXP\',
    );
    
    $customQuery = new WP_Query($args);
    
    这将找到所有类型的帖子experts (注意posts_per_pagepost_status) 他们的meta_key 值介于1和;75个字符。

    相关推荐