Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据父类别排序Wordpress帖子_Php_Wordpress_Post_Categories - Fatal编程技术网

Php 根据父类别排序Wordpress帖子

Php 根据父类别排序Wordpress帖子,php,wordpress,post,categories,Php,Wordpress,Post,Categories,更新:我已尝试使用以下代码: <?php if (is_category(events)) { $posts = query_posts($query_string . '&orderby=event_date&order=desc'); } else { $posts = query_posts($query_string . '&orderby=title&order=asc'); } ?> 有什么理由不起作用吗?按字母

更新:我已尝试使用以下代码:

<?php if (is_category(events)) { 
$posts = query_posts($query_string . '&orderby=event_date&order=desc'); 
} else {
    $posts = query_posts($query_string . '&orderby=title&order=asc'); 
    }
?>

有什么理由不起作用吗?按字母顺序组织帖子似乎效果很好,但在“事件”中的日期顺序仍然没有运气

--

在搜索了各种现有的问题之后,我无法找到一个解决我正在尝试做的事情的方法

目前,我网站上的所有帖子都是按字母顺序排列的,除了我添加的一个新类别外,这很好。对于这个类别,我想按照我在自定义字段中输入的值对所有帖子进行排序。该字段称为“event_date”-因此我想按日期对帖子进行排序,但不是帖子创建的日期,而是用户手动输入该字段的日期

我通过使用以下方法使其正常工作:

<?php if (is_category($events)) { $posts = query_posts($query_string . '&orderby=$event_date&order=asc'); } ?>

但是,这会覆盖所有其他页面的默认顺序

对于字母顺序,我使用:

<?php if (is_category()) { $posts = query_posts( $query_string . '&orderby=title&order=asc' ); } ?>

本质上,我需要一条语句,告诉页面以一种异常的顺序对所有帖子进行排序,除非类别是“事件”,我想按自定义事件日期对它们进行排序


正如你可能知道的那样,我是非常前端的,而不是后端,所以这对我来说是相当新的,所以任何帮助或建议都是非常感谢的。

希望我理解你的问题,使用
WP\u查询
并在
orderby
中在你的orderby列之间添加一个空格:

$args = array(
    'posts_per_page' => 100,
    'orderby' => 'title',
    'order' => 'ASC',
);

if(is_category($events)){
    $args['orderby'] .= " meta_value_num";
    $args['meta_key'] = 'event_date';
}

$posts = (array) new WP_Query( $args );
那么:

<?php $posts = query_posts($query_string . (is_category($events)?'&orderby='.$event_date:'&orderby=title') . '&order=asc');  ?>


要按自定义字段值排序帖子,需要将自定义元字段添加到查询本身
orderby=meta\u value
除了
meta\u key=metafieldid
之外,还允许以这种方式进行订购

如果
get\u query\u var(“cat”)
(或类似的查询变量)返回所需的帖子类别,我将使用并修改查询对象

add_action( "pre_get_posts", "custom_event_post_order" );

function custom_event_post_order( $query )
{
    $queried_category = $query -> get_query_var( "cat" );

    /*
     * If the query in question is the template's main query and
     * the category ID matches. You can remove the "is_main_query()"
     * check if you need to have every single query overridden on
     * a page (e.g. secondary queries, internal queries, etc.).
     */
    if ( $query -> is_main_query() && $queried_category == 123 )
    {
        $query -> set( "meta_key", "event_date" ); // Your custom field ID.
        $query -> set( "orderby", "meta_value" ); // Or "meta_value_num".
        $query -> set( "order", "ASC" ); // Or "DESC".
    }
} 
请记住,此方法将覆盖所有使用相关类别的查询。您可以构建自定义WP_查询对象,这些对象使用自己的参数来构造循环

您还应该标准化将自定义字段数据保存到数据库的方式。对于日期,我更喜欢使用UNIX时间戳格式的时间,它易于移动和操作。这样在查询时就不会发生意外,并且某些数据的格式与其他数据的格式不同

免责声明:我没有时间实际测试上述代码,但总体思路应该可以正常工作


编辑:当然,上面的代码应该被插入到
functions.php
或类似的通用函数文件中。

我尝试过使用它,但都没有显示出来。感谢您的回复。我是否不需要在某个地方使用if语句来告诉事件类别以不同于其他类别的方式显示页面?是的,您会这样做。更新答案非常感谢您的帮助,但是我仍然无法使用WP查询。是否有任何理由说明以下操作是正确的?它按字母顺序显示所有类别,但不按日期顺序显示事件
event_date
是帖子的元,还是添加到posts表的额外列?event_date是用户在创建事件帖子时必须指定的自定义字段之一。这是我希望按其排序帖子的值,因此最接近日期的事件首先出现。
add_action( "pre_get_posts", "custom_event_post_order" );

function custom_event_post_order( $query )
{
    $queried_category = $query -> get_query_var( "cat" );

    /*
     * If the query in question is the template's main query and
     * the category ID matches. You can remove the "is_main_query()"
     * check if you need to have every single query overridden on
     * a page (e.g. secondary queries, internal queries, etc.).
     */
    if ( $query -> is_main_query() && $queried_category == 123 )
    {
        $query -> set( "meta_key", "event_date" ); // Your custom field ID.
        $query -> set( "orderby", "meta_value" ); // Or "meta_value_num".
        $query -> set( "order", "ASC" ); // Or "DESC".
    }
}