5

更新:次のコードを使用してみました:

<?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'); 
    }
?>

それがうまくいかない理由はありますか?投稿をアルファベット順に整理するのはうまくいくようですが、「イベント」内の日付順はまだうまくいきません。

--

さまざまな既存の質問を検索した後、私がやろうとしていることに対する解決策を見つけることができません。

現在、私のサイトのすべての投稿はアルファベット順に並べられていますが、追加した 1 つの新しいカテゴリを除いては問題ありません。このカテゴリでは、カスタム フィールドに入力した値ですべての投稿を並べ替えたいと考えています。フィールドは「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' ); } ?>

基本的に、カテゴリが「イベント」でない限り、すべての投稿をアルファベット順で並べ替えるようにページに指示するステートメントが必要です。ここでは、カスタムイベントの日付で並べ替えます。

おそらくおわかりのように、私はバックエンドではなくフロントエンドなので、これの多くは私にとってかなり新しいものなので、助けやアドバイスをいただければ幸いです。

4

4 に答える 4

1

カスタム フィールド値で投稿を並べ替えるには、クエリ自体にカスタム メタ フィールドを追加する必要があります。orderby=meta_valueさらにmeta_key=metafieldid、この方法での注文が可能になります。

(または同様のクエリ変数)が目的の投稿カテゴリを返す場合、pre_get_postsフックを使用してクエリオブジェクトを変更します。get_query_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_Query オブジェクトを構築できます。

カスタム フィールド データをデータベースに保存する方法も標準化する必要があります。日付については、移動や操作が簡単な UNIX タイムスタンプ形式の時刻を使用することを好みます。このようにして、クエリを実行したときに事故が発生することはなく、一部のデータは残りのデータとは別の方法でフォーマットされます。

免責事項: 上記のコードを実際にテストする時間はありませんでしたが、一般的な考え方は適切に機能するはずです。

functions.phpEDIT:もちろん、上記のコードは、または同様の汎用関数ファイルに挿入する必要があります。

于 2013-07-29T12:38:31.677 に答える
0

うまくいけば、私はあなたの質問を理解しました。WP_Queryそして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 );
于 2012-09-07T16:04:02.570 に答える
0
<?php
$recent = new WP_Query(“cat=ID&showposts=x”);
while($recent->have_posts()) : $recent->the_post();
?>
于 2012-09-07T16:26:36.243 に答える
0

どうですか:

<?php $posts = query_posts($query_string . (is_category($events)?'&orderby='.$event_date:'&orderby=title') . '&order=asc');  ?>
于 2012-09-07T16:06:31.300 に答える