仅在生产服务器上使用GET_POSTS/orderby时,POST未按正确的字母顺序或ID顺序显示

时间:2017-09-11 作者:lomokev

我有一个页面,列出了一些自定义帖子,但它们没有按正确的字母顺序显示。作为测试,我还尝试按ID的顺序列出它们,但它们的顺序也不正确。当它被列为ID时,它们看起来好像分成了3组在4000年代的高位数字,低于200,然后是3000,这很奇怪。它在我的本地服务器上运行良好。在Wordpress后端也可以进行订购。当我在1&;上将站点移动到新的托管包时,问题似乎发生了;1、以前是否有服务器特定的订购问题?

我制作了两个测试页面,显示了标题和ID(顺序错误)ID顺序的简单列表:http://www.realpatisserie.co.uk/allergen-list/allergen-list-test-id/标题顺序:http://www.realpatisserie.co.uk/allergen-list/allergen-list-test/

    $args = array(
        \'posts_per_page\'   => -1, // show all items
        \'orderby\'          => \'ID\', // was \'title\',
        \'order\'            => \'ASC\',
        \'post_type\'        => \'product_al\',
        \'post_status\'      => \'publish\'
    );
    $myposts = get_posts( $args );

      foreach ( $myposts as $post ) : setup_postdata( $post );

            $product_title = ucfirst(get_the_title());
            $product_ID = get_the_ID();

              ?>

              <tr id="p_id_<?= $product_ID ?>\'">
                  <td class="title_cell"><?= $product_ID ?></td>
                  <td class="title_cell"><?= $product_title ?></td>
              </tr>

              <?php

    endforeach; 

    wp_reset_postdata();
编辑:我尝试了一些不同的方法,使用了WP\\u Query,它也做了同样的事情

    $args = array(
        \'post_type\' => \'product_al\',
        \'posts_per_page\'   => -1,
        \'orderby\' => \'ID\',
        \'order\'   => \'ASC\',
    );
    $the_query = new WP_Query( $args );

          while ( $the_query->have_posts() ) : $the_query->the_post();

                $product_title = ucfirst(get_the_title()); 
                $product_ID = get_the_ID();

                ?>
                  <tr id="p_id_<?= $product_ID ?>\'">
                      <td class="title_cell"><?= $product_ID ?></td>
                      <td class="title_cell"><?= $product_title ?></td>
                  </tr>
                  <?php

        endwhile;

        wp_reset_postdata();

2 个回复
SO网友:Rarst

服务器配置对POST查询有直接影响是不典型的,缺少SQL显式的错误行为。这将是一个相当边缘的情况。

更常见的情况是,一些代码附加到查询过滤器上以达到其目的,但不够精确,无法只针对它需要的查询。仅针对前端的问题似乎也指向了这个方向。

在任何一种情况下,故障排除都需要深入挖掘正在生成和执行的实际SQL查询。在某个阶段,正确/错误的环境之间可能会存在差异,或者您可以排除SQL并继续进行PHP方面的故障排除。

SO网友:lomokev

终于弄清楚了,我的帖子类型(product_al) 不支持menu\\u order,但由于某些原因,一些旧帖子获得了menu\\u order的值。

任何新创建的帖子都会将其menu\\u顺序设置为0,这就是为什么它看起来有点混乱。

为了解决这个问题,我在phpmyadmin中运行了这个SQL来重置我的帖子类型上的menu\\u顺序(product_al):

UPDATE wp_posts  SET `menu_order` = \'0\' WHERE wp_posts.post_type = \'product_al\' ;
仍然不知道为什么我在menu_order, 我最近移动了这个网站,但不知道它是怎么发生的。

我发现有点奇怪的是WP_Query 即使您指定了要对其排序的查询,它仍然始终会添加ORDER BY wp_posts.menu_order, 如果WordPress没有这样做,那就不会有问题了。

结束

相关推荐

即使使用元查询,Orderby查询也不适用于自定义字段

我编写了以下查询来获取列表,并希望按升序显示名称列表。我刚才想通过meta_key 和meta_value 作为参数,但它不能正确地进行排序。尝试之后meta_query 我仍然被同样的问题困扰着。$connected = new WP_Query( array( \'connected_type\' => \'posts_to_pages\', \'connected_items\' => get_queried_ob