数组中的 Wordpress meta_values 不起作用

Wordpress meta_values in array don't work

我希望有人帮助我。

我的第一个问题:数组中的meta_value在我的函数中不起作用:

'value' => array('English','Spain','German','French'),

它适用于单个值,但数组中的更多值无效。 它只是忽略了我的数组。

我的第二个问题: 我想按排序顺序列出项目:'English'、'Spain'、'German'、'French' 之后按 'ratings_score' 排序,然后按 "modified" 排序。 但根据国家我只能按字母顺序列出。在这一行中,我想列出 'English'、'Spain'、'German'、'French',但请忽略它。

有人可以帮我解决问题吗?

这是我的函数:

function ta_modify_main_query($query) {
      if ( $query->is_main_query() && ( $query->is_home() || $query->is_search() || $query->is_archive() )  ) {

    {
     $query->set('meta_query', array(
            'country' => array(
                'key' => 'country',
                'value' => array('English','Spain','German','French'),
                ),
            'ratings_score' => array(
                    'key' => 'ratings_score',
                ),
            ));
            $query->set('orderby',array(
                'country' => 'ASC', 
                'ratings_score' => 'DESC',
                'modified' => 'DESC'
            ));     
        }

  return $query;       
  }
}
add_action( 'pre_get_posts', 'ta_modify_main_query' );

meta_query

您正在尝试将值与数组进行比较。 WP 中的 MySQL 包装器不会这样做。将您的 meta_query 集查询更改为:

array(
  'key' => 'country'
  'value' => array('English','Spain','German','French'),
  'compare' => 'IN'
),
array(
  'key' => 'ratings_score',
  'compare' => 'EXISTS'
)

我假设您要包含 ratings_score 元查询,因为您想查看它是否存在。如果您要检查其他内容,请更改比较(并可能向查询添加一个值)。

订购

遗憾的是,您不能对只有字母数据的数据集使用 non-alphabetic 排序。您实际上是在寻求某种方式 MySQL 到 "know," 您想要的顺序。

通常,对于循环中的平面查询,您订购规格的最佳方式可能是在获得数据后 re-order 数据。由于您在声明范围内工作(基本上,SQL),因此您需要做一些不同的事情。

可能最简单并且(通常是这种情况)最差的方法是更改​​您的数据,以便它们读取['1English', '2Spain', '3German', '4French'],然后在需要使用该名称的任何时候切断第一个字符。这真的很糟糕(特别是对于像我这样有 CDO 的人来说,他们认为非 3NF 数据是邪恶的)但它会让你找到最快的解决方案。

最简洁、更规范的方法是按正确键入的顺序加入。这可能意味着对于每个 post,您必须在 country 旁边添加第二个键,例如 country_order,并带有值。 'country' = 'English' 的 post 会 'country_order' = '1','country' = 'German' 会 'country_order' = ' 3',依此类推。然后只需在 country_order 上订购。这可能是您最好的解决方案,尽管您必须为每个 post.

维护并行元数据

最干净和最困难的(阅读:disaster-prone)解决方案是挂钩 WP 查询生成,在您需要的数据中查找 country 元查询和补丁。询问您是否需要这样做;它既不直接也不易维护,所以如果没有明确的需要,我不会列出它。

顺便说一句

英语、德语和法语不是国家。国家由 名词。这些是语言或国籍(以及其他一些东西),因此它们是形容词。西班牙是一个名词,因此是一个合适的国家。您的数据在内部(它们之间)和外部(对于它们的字段名称)都不一致。由于其他限制,这可能不是您自己做的或在您的能力范围内修复。如果它们在您的修复能力范围内,那么为了可维护性,您最好更改它们。