web-dev-qa-db-ja.com

Pre_get_postsを使用してorderbyをカスタムフィールドに設定する

私はACFプラグインを使用して、カスタム投稿タイプ(プロジェクト)に適用されるカスタムフィールドを作成しています。私のfunctions.phpファイルで私はカスタムフィールドを使って私のカスタム投稿タイプアーカイブの順序を変更するためにpre_get_postsを使おうとしています。

function apply_projects_query_filter ($query)
{
    if (is_admin()) {
        return $query;
    }

    if (is_archive() && $query->query_vars['post_type'] == 'projects' && $query->is_main_query()) {

        $query->set('orderby', 'meta_value');
        $query->set('meta_key', 'project_status');       
        $query->set('order', 'DESC');
    }

    return $query;
}
add_action('pre_get_posts', 'apply_projects_query_filter');

私のproject_statusカスタムフィールドは0または1の可能な値を持っています。上記のコードを使用することは全く結果を返しません。何がおかしいのですか?

2
BitShredder

その理由は定かではありませんが、meta_queryを使用して別のフィルタを追加することで、すべて機能し始めました。 project_updateフィールドが設定されておらず、project_status順に並べられている投稿のみをカスタム投稿タイプアーカイブに入れます。これは私がしたことです。

$meta_query = array(
    array(
       'key'=>'project_update',
       'value'=>'1',
       'compare'=>'!=',
    )
);

$query->set('meta_query', $meta_query);
0
BitShredder