【问题标题】:Wordpress - Fetching all data and sortingWordpress - 获取所有数据并排序
【发布时间】:2013-04-01 17:27:01
【问题描述】:

我正在使用 Wordpress。我有以下查询来从数据库中获取数据,它运行良好

$args1 = array(
 'post_type' => 'gallery',
 'posts_per_page' => $gnum,
 'post__in' => array(400, 403),
 'paged' => $paged,
 'orderby' => 'title',
 'order' => 'ASC'                    

);

query_posts($args1);

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

//And then some other code to display data

在上面的查询中使用'post__in' =&gt; array(400, 403),,我正在获取 ID='400' AND '403' 的行。所以当我回显时,我只能看到两个信息。

现在,我想要实现的是从表中获取所有数据,但是当我显示信息时,我想首先获取 ID 为 400 的行,然后是 403,然后是基于'orderby' =&gt; 'title', 的其余行AND '订单' => 'ASC'

您能帮忙查询一下吗?

谢谢

编辑

$args2 = array(
 'post_type' => 'gallery',
 'posts_per_page' => $gnum,
 'post__not_in' => array(400, 403),
 'paged' => $paged,
 'orderby' => 'title',
 'order' => 'ASC'                    

);

query_posts($args2);

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    不确定这是否适用于 query_post 参数,但它正在补充有效的 SQL。试试:

    $args = array(
     'post_type' => 'gallery',
     'posts_per_page' => $gnum,
     'paged' => $paged,
     'orderby' => 'case when ID in (400,403) then -1 else title end, title',
     'order' => 'ASC'                    
    );
    
    query_posts($args);
    

    【讨论】:

    • 感谢您的回答。我已经尝试过你的代码..它正确地给了我前两个结果(400,403),但之后它没有根据标题 ASC 对结果进行排序。
    • 尝试在end 之后添加ASC 看看是否有助于排序? ^^
    • 我刚试过'orderby' =&gt; 'case when ID in (400,403) then -1 else title end ASC, title',,但我发现结果没有变化:(
    • 另外,您是否使用“Post Types Order”插件或类似插件?
    • 非常感谢。 “Post Types Order”插件刚刚解决了我的问题。非常感谢您的帮助:)
    【解决方案2】:

    使用 Wordpress 查询结构是不可能的,就像您正在做的那样。一种可能的解决方案是执行第二个查询,查找不在 (400, 403) 中的结果,然后简单地将这个结果数组添加到第一个数组的末尾。

    为此,您可能应该使用get_posts() 而不是query_posts(),这样它就不会改变主循环。

    $array = get_posts($args1);
    $array = array_merge($array, get_posts($args2);
    

    【讨论】:

    • 感谢您的回复。请检查我的问题的编辑部分。你能告诉我如何添加这两个数组结果吗?
    • @black_belt 有很多方法。我已经用示例更新了我的答案。
    【解决方案3】:

    我想您可以尝试执行以下操作:

    $args = array(
     'post_type' => 'gallery',
     'posts_per_page' => $gnum,
     'paged' => $paged,
     'orderby' => 'ID = 400 DESC, ID = 403 DESC, title',
     'order' => 'ASC'                    
    );
    
    query_posts($args);
    ...
    

    让我知道这是怎么回事。

    【讨论】:

    • 非常感谢您的回复。我可以正确地看到前两个帖子,但是其余的行没有以完美的顺序显示
    • 如果您使用我发布的确切参数,它们应该按标题升序排序(按字母顺序)。你得到什么而不是这个?
    • 我刚刚在您的代码中将id 替换为ID。我完美地获得了前两个结果(先是 400,然后是 403),但其余行以随机顺序显示。像.. H,S,R,Z,H...
    • 另一个想法是制作400和403置顶帖。你试过这样做吗?
    • 不,我没有尝试过,但我尝试了对400 and 403 的查询,然后回显结果,然后对其余行进行另一个查询,然后回显结果。但现在我试图只使用一个查询来达到相同的结果。
    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    相关资源
    最近更新 更多