WordPress由meta_value的第二个词命令

时间:2012-12-13 17:48:28

标签: mysql wordpress sql-order-by explode meta-key

我有一个页面模板“按作者”(ID 1814)我用来查询我的帖子(标题:书名和内容:描述)由meta_key:author_name,它等同于书籍作者的第一个&姓氏_但是,我想通过作者的姓氏 - meta_value中的第二个单词来订购这些帖子。我可以使用以下方法过滤在循环中获取这些结果:

$values = get_post_custom_values("author_name");
$alpha = end(explode(' ',$values[0]));

但是我不知道如何通过这个结果来获取这些帖子,而不是通过author_name的名字。我在下面找到了关于functions.php文件的查询,我认为这个文件让我在正确的路径上,但在我使用它时在页面上返回404错误。

此处的代码:http://randyhoyt.com/wordpress/custom-post-type-ordering/

我甚至没有添加SQL查询来爆炸(或者SQL中的任何内容而不是PHP)。不确定该代码是否无效,因为我在查询页面模板而不是archive.php文件?有什么建议让我走上正确的道路吗?

add_filter('posts_join', 'author_join' );
function author_join($wp_join) {
    if(is_page(1814)) {
        global $wpdb;
        $wp_join .= " LEFT JOIN (
                SELECT post_id, meta_value as author_name
                FROM $wpdb->postmeta
                WHERE meta_key =  'author_name' ) AS DD
                ON $wpdb->posts.ID = DD.post_id ";
    }
    return ($wp_join);
}

add_filter('posts_orderby', 'author_order' );
function author_order( $orderby ) {
    if(is_page(1814)) {
            $orderby = " DD.post_title ASC";
    }
    return $orderby;
}

1 个答案:

答案 0 :(得分:0)

我已经处理了一个类似的问题,其中以“The ...”开头的乐队名称在T字母顺序排列。我实现的修复是为了反转数据库中名称的顺序以满足MySQL查询,并且然后显示页面可以使用字符串函数将名称反转回正确的顺序。

显示页面上显示的内容将修复输出:

// The author's name, reverse ordered.
$author_name = 'Doe,John';

// Break the full name into its parts.
list($last_name,$first_name) = explode(',',$author_name);

// Then display the name in the correct order.
echo(first_name.' '.last_name);