2011-06-24 3 views
3

投稿IDではなくカテゴリを表示するときに、wordpressのデフォルトクエリをorderbyタイトルに変更したいと思います。説明するのはあまりにも退屈な理由からデフォルトのワードプレスクエリをorderbyタイトルに変更する

(!)私は、デフォルトの設定を変更するのではなく、カスタムクエリを使用したいと思います(私が行う方法を知っている)

理想的には、関数に入るいくつかのコードになります私のテンプレートの.phpではなく、コアインストールをハックする必要があります。

ご協力いただきありがとうございます。あなたのarchive.phpで

答えて

6

、コード

if (have_posts()) : while (have_posts()) : the_post(); 

を見つけてそれを置き換える:

$cat_posts = new WP_Query($query_string."&orderby=title&order=ASC"); 
if ($cat_posts->have_posts()):while($cat_posts->have_posts()):$cat_posts->the_post(); 

これはトリックを行う必要があります。

更新:これは、ソースコードを変更したい場合に行われます。

+0

私は、それぞれのカテゴリのデフォルトを個別に変更できる「WP Post Sorting」というプラグインを使用していましたが、うまく機能しているようです。 – JorgeLuisBorges

33

また、このようORDERBYと秩序変数を変更するthe action 'pre_get_posts'を使用することができます。

add_action('pre_get_posts', 'custom_get_posts'); 

function custom_get_posts($query) { 

    if((is_category() || is_archive()) && $query->is_main_query()) {  
    $query->query_vars['orderby'] = 'name'; 
    $query->query_vars['order'] = 'ASC'; 
    } 

} 

注:is_main_query()チェックを使用すると、プラグインやテーマ機能で意図しない行動を起こさないことを確認してください役立ちます。それを削除することは問題ありませんが、他に何が影響しているかを確認してください!

+0

+1既存のクエリを検索し、問題の状態のようにfunctions.phpに入っているものを思いついています。 –

+0

+1このメソッドは、**デフォルトクエリ**を変更します。そのため、 'wp_reset_query()'は* order *をデフォルトにリセットしません。そしてデータベースを1回だけヒットします。 – frnhr

+1

フィルタを追加することで、本当に変更したいことに注目してください。このフィルタは、WPのすべてのクエリに適用され、ホームページの投稿リスト、メニューアイテム、カテゴリの投稿などです。例えば、上記の解決策は、メニュー項目の順序にも影響するはずです。(私が間違っていると私を修正してください) – Brock

-1

だけでなく、あなたがコード

global $query_string; // required 
$posts = query_posts($query_string."&orderby=title&order=ASC"); 

のこの行は、コード

if (have_posts()) : while (have_posts()) : the_post(); 

のこの行の前に、あなたが望むものを手に入れるでしょう、あなたのarchive.php

使用中の1つの別のことを行うことができますデフォルトのwordpressループによって。 これはあなたに大いに役立つことを願っています。

ありがとうございます。

+0

https://codex.wordpress.org/Function_Reference/query_posts "この機能は、プラグインやテーマでは使用されません。後で説明するように、メインクエリを変更するためのより良い、より良いオプションがあります。 query_posts()は、ページのメインクエリをクエリの新しいインスタンスに置き換えて変更するのは、非常に単純で問題の多い方法です。これは非効率的で(SQLクエリを再実行します)、いくつかの状況では完全に失敗します(特に、ページングのページングを扱う場合)。最近のWPコードでは、この目的のためにpre_get_postsフックを使用するなど、より信頼性の高い方法を使用する必要があります。 –

関連する問題