【问题标题】:Sort posts alphabetically on a specific page in Wordpress在 Wordpress 的特定页面上按字母顺序对帖子进行排序
【发布时间】:2020-04-05 08:39:16
【问题描述】:

编辑:找到了我的旧代码,它有效,并以这种方式修复。还将使用插件添加自定义功能,以避免在下次主题更新时再次消失(感谢 Heba)。和代码:

function foo_modify_query_order( $query ) { 
if (get_the_ID()==80) { $query->set( 'orderby', 'title' ); $query->set( 'order', 'ASC' ); } } add_action( 'pre_get_posts', 'foo_modify_query_order' ); 

所以,这应该是一个简单的任务,但我不知道为什么它现在不起作用。我已经尝试了所有方法,每个 Google 链接都是紫色的,所以现在我希望有人能告诉我它是什么,我做错了。

我应该首先提到它是一个 Divi 主题,但几个月前我确实让它工作了,但忘记了如何,我现在无法重新创建它。

我只是想按字母顺序 (A-Z) 对主要查询进行排序,但仅限于名为 recipes 的页面上。该网站将所有食谱及其博客帖子都作为帖子发布,但博客帖子按日期排序并显示在单独的页面上,效果很好。

但是当我尝试改变它时,奇怪的事情正在发生。如果我使用此代码,它确实有效,但博客页面也会按字母顺序排序,这是不应该的。

function foo_modify_query_order( $query ) {
    if (is_archive()) {
        $query->set( 'orderby', 'title' );
        $query->set( 'order', 'ASC' );
    }
}

add_action( 'pre_get_posts', 'foo_modify_query_order' );

这对我来说没有意义,因为它是帖子?在我尝试过的所有方法中,只有使用 is_archive() 才能排序。

如果我尝试让它首先检查特定页面,例如&& is_page('recipes'),我会收到错误消息。

如果我只添加 if (is_page('recipes')){ echo 'Recipes'; } 它可以工作,但如果我尝试在里面添加排序,我什么也得不到。

所以部分工作,但我不能将两者结合起来。这是Divi的问题还是我做错了?希望任何人都可以提供帮助,我现在已经尝试了很多不同的东西。干杯:)

【问题讨论】:

    标签: php wordpress sorting posts


    【解决方案1】:

    我建议创建一个子主题,您将在其中创建一个新的页面模板以在“食谱”页面中使用。

    首先,使用Child Theme Configurator插件设置一个新的子主题,不要忘记选择Copy Menus, Widgets and other Customizer Settings from Parent Theme to Child Theme选项来保留你的设置:

    之后,从子主题配置器的文件选项卡中,复制用于博客的页面模板(或“食谱”页面中使用的页面模板)。

    之后,将文件名和页面模板文件顶部模板名称后面的名称更改为按字母顺序排列的食谱或您喜欢的任何名称,如下所示:

    /*
     * Template Name: recipes ordered alphabetically
     */
    

    您可以将这些参数添加到查询中:

    $args['orderby'] = 'title'; $args['order'] = 'ASC';

    并将“食谱”页面模板更改为新创建的模板。 如需更详细的答案,请插入页面模板中使用的代码。

    【讨论】:

    • Heba,您好,感谢您的回复。我可以很容易地看到创建一个子主题,会很快修复它,就像你说的那样,但它不是一个选项 atm,我害怕。我只是被要求尝试快速解决这个“小”问题,我无法说服他们将其设为儿童主题,它已经是一个相当大的网站了。
    • 我明白了,在这种情况下,您能确定“食谱”页面的类型吗?是使用博客模板的页面,还是食谱帖子类型的存档页面?
    • 我很确定这是第一个。一个标准页面,其中列出了所有帖子(食谱)。食谱针对每种类型单独分类,例如“素食”、“鱼”、“沙拉”等。没有自定义帖子类型。奇怪的是我怎么能让它回响某些东西,而且只有在我要求它的那个页面上。我可以让它按字母顺序对所有帖子进行排序,但是当我将两者结合起来时,就没有运气了。
    • 也很抱歉,昨天有点忙。正如我所提到的,我们致力于在测试服务器上重新上线一个旧版本,以查看我一个月前用来使其工作的旧代码。试过了,它实际上又可以工作了。现在我们只需要弄清楚如何让代码在主题更新时保持不变,因为他没有使用子主题。但是非常感谢到目前为止的帮助:)
    • 哦,顺便说一句,这是实际工作的代码。忘记了我使用“get_the_id”来定位正确的页面。 function foo_modify_query_order( $query ) { if (get_the_ID()==80) { $query->set( 'orderby', 'title' ); $query->set( 'order', 'ASC' ); } } add_action( 'pre_get_posts', 'foo_modify_query_order' );
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多