按自定义域进行归档排序功能(前端)

时间:2010-11-04 作者:Martin-Al

我想让用户能够按照我预定义的一些自定义字段对归档中的帖子进行排序。

最终结果将是一个选项卡式容器,用户将单击他/她想要查看的相关过滤器链接。

例如:http://www.metacritic.com/browse/games/genre/date/action/all

我想:
-按日期筛选
-按标题筛选
-按meta\\u键筛选

这可能吗?

感谢您的帮助……)

2 个回复
SO网友:t31os

注:关于简·法布里的回答。。。请确保首先清理传入的数据,否则您将面临各种令人讨厌的查询字符串。。

您可能还应该返回该过滤器上的传入数据,return$query,代替return;

我还认为最好有一个可能值的数组,或者查询可能的元值,这样可以构建一个开关,根据这些可能值中的一个来检查传入值的匹配情况(更容易清理传入的数据)。

这里不是普通用户,否则我会发布一个示例(不知道在这里发布代码是如何工作的-在FAQ中找不到)。

编辑:谢谢你给我发了一张海报,让我知道发布代码的信息。

下面是一个示例,希望它能正常工作……:)

// Only add the needed meta orders
$possible_orders = array( \'some_meta_key\', \'some_other_meta_key\' );

add_filter( \'pre_get_posts\', \'archive_meta_sorting\' );
function archive_meta_sorting( $query_object ) {
    if( !is_archive() || is_admin() )
        return $query_object;

    if( !isset( $_GET[\'orderby\'] ) )
        return $query_object;

    global $possible_orders;

    $orderby = trim( $_GET[\'orderby\'] );    

    switch( $orderby ) {
        case( in_array( $orderby, $possible_orders ) ):
            $query_object->set( \'orderby\', \'meta_value\' );
            $query_object->set( \'meta_key\', $orderby );
            break;
        // You don\'t actually need these two cases below, it will work without them
        // The switch could actually just be a simple if in_array condition..
        case \'title\':
            $query_object->set( \'orderby\', \'title\' );
            break;
        case \'date\':
            $query_object->set( \'orderby\', \'date\' );
            break;
    }
    return $query_object;
}
您只需要为元排序传递值,使用本机支持按这些值排序,标题和日期就可以正常工作,order(desc或asc)也可以这样说。

我希望这有助于。。。

SO网友:Jan Fabry

这当然是可能的,但它的简单程度取决于您希望URL的干净程度。如果你不介意附加?orderby=[fieldname]&order=[asc or desc], 你可以试试看。正在添加?orderby=title&order=asc 事实上,归档页面将按标题排序,在“Z”之前加上“A”(默认顺序是降序,因为按日期排序是合乎逻辑的)。

如果你想通过一个元键来订购,比如rating, 您不能只添加orderby=rating, 但你也have to tell the WP_Query::get_posts() function that you want to include this meta key in the query. 最好的方法可能是pre_get_posts 操作,您可以在其中检查是否存在此订单字段,并将其添加到query_vars 如果需要,对象的。类似这样(但未经测试):

add_action(\'pre_get_posts\', \'check_meta_sort\');
function check_meta_sort(&$query)
{
    if (!isset($_GET[\'orderbymeta\'])) {
        return;
    }
    $query->query_vars[\'meta_key\'] = $_GET[\'orderbymeta\'];
    $query->query_vars[\'orderby\'] = $_GET[\'orderbymeta\'];
}
如果您想要“漂亮”的URL,以/title, /date, /[meta-key], 你需要检查一下重写引擎,但我帮不了你(yet).

结束

相关推荐

Sort admin menu items

关于“的相关注释”Changing the Order of Admin Menu Sections?“,我正在寻找一种按字母顺序对WordPress管理区域的每个子部分中的条目进行排序的方法。目前,每当添加新插件时,其条目都会出现在“设置/工具/插件”下看似随机的位置,通常很难找到新的菜单项。(我已经有很多插件了,所以我的菜单很满。)由于我相当经常地添加和删除插件,所以我宁愿不需要不断进入设置页面来获取菜单排序插件并调整顺序。抱歉问了这么长的问题;我只是想弄清楚我在找什么。示例代替: S