1

「著者別」のページテンプレート(ID 1814)を使用して、投稿(タイトル:本のタイトルとコンテンツ:説明)をmeta_key:author_nameでクエリしています。これは、本の著者の姓名の両方に相当します。ただし、これらの投稿を作成者の姓(meta_valueの2番目の単語)だけで並べ替えます。次を使用して、これらの結果をループでフィルタリングして取得できます。

$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クエリ(またはPHPではなくSQLにあるもの)を追加していません。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;
}
4

1 に答える 1

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);
于 2012-12-18T00:39:55.117 に答える