2012-09-07 8 views
5

UPDATEに基づいてWordpressの記事を発注:私は、次のコードを使用して試してみました:は、親カテゴリ

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

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

-

様々な既存の質問を検索した後、私はかなり私がやろうとしています何の解決策を見つけることができません。

現在、私のサイトのすべての記事はアルファベット順に並べられていますが、私が追加した新しいカテゴリを除いては問題ありません。このカテゴリでは、すべての投稿をカスタムフィールドに入力する値で並べ替える必要があります。このフィールドは「event_date」と呼ばれています。そのため、投稿を本日の日付順に並べ替えたいのですが、投稿が作成された日付ではなく、ユーザーが手動でこのフィールドに入力した日付ではありません。

私はそれが使用して作業を取得するために管理

<?php if (is_category($events)) { $posts = query_posts($query_string . '&orderby=$event_date&order=asc'); } ?> 

をしかし、これは他のすべてのページについてaphabetical順序を上書きします。

アルファベット順のために私が使用しています:

<?php if (is_category()) { $posts = query_posts($query_string . '&orderby=title&order=asc'); } ?> 

をカテゴリは私がすることによって、それらを注文したい「イベント」でない限り、基本的に私は、aphabeticalために、すべての記事を注文するページに指示文を望みますカスタムイベントの日付。

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

答えて

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); 
+0

他のカテゴリとは違うページを表示するようにイベントカテゴリに伝えるにはどこかでifステートメントを使用する必要はありませんか? –

+0

はい、そうです。回答を更新 –

+0

これはあなたの助けに非常に感謝、私はまだWP - クエリを使用して幸運を持っていない。 次のような理由がありますか?アルファベット順にすべてのカテーテルを表示しますが、日付順のイベントは表示しませんか? <?php if(is_category(events)){ \t $ posts = query_posts($ query_string。 '&orderby = event_date&order = desc'); } else { \t $ posts = query_posts($ query_string。 '&orderby =タイトル&オーダー= asc'); \t} ?> –

0

何について:によって投稿を注文するには

<?php $posts = query_posts($query_string . (is_category($events)?'&orderby='.$event_date:'&orderby=title') . '&order=asc'); ?> 
+0

私はこれを使用しようとしましたが、表示しませんでした。しかし、返事を感謝します。 –

0
<?php 
$recent = new WP_Query(“cat=ID&showposts=x”); 
while($recent->have_posts()) : $recent->the_post(); 
?> 
1

カスタムフィールド値を追加するには、カスタムメタフィールドをクエリ自体に追加する必要があります。 meta_key=metafieldidに加えてorderby=meta_valueは、この方法で注文することができます。

を使用し、get_query_var("cat")(または同様のクエリvar)が希望する投稿カテゴリを返す場合は、クエリオブジェクトを変更します。

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.phpまたは同様の汎用機能ファイルに挿入する必要があります。

+0

非常に良い清潔なソリューション! – Philipp

関連する問題