我有一个页面模板“按作者”(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;
}
答案 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);