【问题标题】:Sort by custom meta_key in WordPress get_posts(), and include posts that do not have the meta_key按 WordPress get_posts() 中的自定义 meta_key 排序,并包含没有 meta_key 的帖子
【发布时间】:2020-08-07 05:03:15
【问题描述】:

我已经在我的 WordPress 帖子中设置了名为“my_sort”的自定义元数据,它有一个像 1、2、3、4 这样的数值.....见下图:

我想按此元“my_sort”升序排序。这是我正在应用的以下代码:

<?php 
    $catPost = get_posts(array('category' => get_cat_ID($categories[0]->name), 'meta_key' => 'my_sort', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'numberposts' => 100)); //change this
  ?>

这段代码的问题是它可以工作,但有一个问题需要我解决。

它会留下所有其他没有“my_sort”元数据的帖子。我也想包括这些帖子。我要:

  1. 首先,具有“my_sort”的帖子必须按升序排列。
  2. 那么应该是没有“my_sort”元的帖子。

更新

当我尝试以下查询时。

$catPost = get_posts( 
        array (
            'category' => get_cat_ID($categories[0]->name), 
            'numberposts' => 100, 
            'orderby' => 'meta_value_num', 
            'meta_type' => 'NUMERIC',
            'order' => 'ASC', 
            'meta_query' => array(
                'relation' => 'OR',
                array(
                   'key'=>'my_sort',
                   'compare' => 'EXISTS'         
                ),
                array(
                    'key'=>'my_sort',
                    'compare' => 'NOT EXISTS'         
                )
            ),
        )
      );

我没有得到正确的结果。查看显示结果的图像。

这里:

Record1:没有“my_sort”元数据。

Record2:确实有“my_sort”,它的值为 2。

Record3 : 没有“my_sort”元数据。

Record4:确实有“my_sort”元数据,它的值为 4。

这种情况下的结果应该是这样的:

Record2 然后 Record4 然后 Record1 然后 Record4 但显然情况并非如此。

怎么了?

【问题讨论】:

  • 这能回答你的问题吗? Wordpress query - Order by meta-field value
  • @FluffyKitten 不,我没有使用 meta_query。
  • 如果要按元键排序,则需要!
  • @FluffyKitten 在我的情况下没有可比性。只是升序。你能在方框里给我答案,以便我检查。
  • 您能否将其从 get_posts 更改为使用 WP_Query,即 $myquery = WP_Query( array ( ... ); 与所有相同的参数,除了将 numberposts 替换为 posts_per_page。当你有这个工作时,你可以添加这个并让我们知道它打印出来的内容:echo $myquery-&gt;request;

标签: wordpress


【解决方案1】:

如果您想按可能没有任何值的元键进行排序,您需要使用 meta_query 组合搜索帖子的结果键和搜索发布 没有密钥。

这个没有经过测试,但是主要逻辑是有的:

$catPost = get_posts( 
    array (
        'category' => get_cat_ID($categories[0]->name), 
        'numberposts' => 100, 
        'orderby' => 'meta_value_num', 
        'meta_type' => 'NUMERIC',
        'order' => 'ASC', 
        'meta_query' => array(
            'relation' => 'OR',
            array(
               'key'=>'my_sort',
               'compare' => 'EXISTS'         
            ),
            array(
                'key'=>'my_sort',
                'compare' => 'NOT EXISTS'         
            )
        ),
    )
);

【讨论】:

  • 查询运行良好。它正在提供所有记录,但排序顺序无法正常工作。这不是以我需要的方式返回记录 1. 首先,具有“my_sort”的帖子必须按升序排列。 2. 那么没有“my_sort”元的帖子应该来了。
  • @yogihosting 尝试将’meta_key’ =&gt; ‘my_sort’, 添加到meta_query 之外的数组中(例如,在'numberposts’ =&gt; 100, 之后)。另外,它们以什么顺序被退回?如果我们知道这一点,它将帮助我们解决订单。
  • 它不工作。当我将 'meta_key' => 'my_sort' 放在 'numberposts' => 100 之后并在 'meta_query' 之外时,我只是检查它,然后没有显示 'my_sort' 的记录。
  • 当您在该行之前使用它时,它们显示的顺序是什么?另外,创建时 my_sort 是什么类型?如果它只是一个普通的文本字段,那么添加 meta_type 就像我上面更新的答案一样。如果它不起作用,请告诉我它们与这个 一起出现的顺序!
  • meta_type 是数字。我已经通过在代码上应用它来测试它,但没有用。我需要的是没有“my_sort”元数据的帖子应该出现在有“my_sort”的帖子之后。
猜你喜欢
  • 2015-08-11
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
相关资源
最近更新 更多