0

カスタムフィールド「Datum」(スウェーデン語で日付)を使用する投稿タイプ「events」を作成しました。この投稿タイプのデフォルト ビューをこのフィールドでソートしたい。

これまでのところ、私は得ました:

 register_post_type(
                'events',
                array(
                        'labels' => array(
                                'name' => __( 'Arrangemang' ),
                                'singular_name' => __( 'Arrangemang' )
                        ),
                        'supports' => array(
                                'title',
                                'editor',
                                'custom-fields'
                        ),
                        'public' => true,
                        'has_archive' => true,
                        'query_var' => array(
                                'post_type' => 'events',
                                'meta_key' => 'Datum',
                                'orderby' => 'meta_value',
                                'order' => 'ASC',
                        ),
                )
        );

しかし、注文は機能しません。イベントのアーカイブ ページで実行すると、次のようprint_r($wp_query->query_vars);になります。

Array
(
    [post_type] => events
    [error] =>
    [m] => 0
    [p] => 0
    [post_parent] =>
    [subpost] =>
    [subpost_id] =>
    [attachment] =>
    [attachment_id] => 0
    [name] =>
    [static] =>
    [pagename] =>
    [page_id] => 0
    [second] =>
    [minute] =>
    [hour] =>
    [day] => 0
    [monthnum] => 0
    [year] => 0
    [w] => 0
    [category_name] =>
    [tag] =>
    [cat] =>
    [tag_id] =>
    [author_name] =>
    [feed] =>
    [tb] =>
    [paged] => 0
    [comments_popup] =>
    [meta_key] =>
    [meta_value] =>
    [preview] =>
    [s] =>
    [sentence] =>
    [fields] =>
    [category__in] => Array
        (
        )

    [category__not_in] => Array
        (
        )

    [category__and] => Array
        (
        )

    [post__in] => Array
        (
        )

    [post__not_in] => Array
        (
        )

    [tag__in] => Array
        (
        )

    [tag__not_in] => Array
        (
        )

    [tag__and] => Array
        (
        )

    [tag_slug__in] => Array
        (
        )

    [tag_slug__and] => Array
        (
        )

    [meta_query] => Array
        (
        )

    [ignore_sticky_posts] =>
    [suppress_filters] =>
    [cache_results] => 1
    [update_post_term_cache] => 1
    [update_post_meta_cache] => 1
    [posts_per_page] => 100
    [nopaging] =>
    [comments_per_page] => 50
    [no_found_rows] =>
    [order] => DESC
    [orderby] => wp_posts.post_date DESC
)

の引数を誤解したのquery_varでしょregister_post_typeうか、それとも私が要求したとおりにリストがソートされないのはなぜですか?

4

2 に答える 2

0

私が理解している限り、query_varはブール値にすぎず、カスタム投稿タイプの順序は処理しません。解決策は、投稿タイプのカスタムアーカイブページを作成し、そこでループを変更して、そのカスタム投稿タイプのアーカイブページが常にメタ値で並べ替えられるようにすることです。

于 2012-11-01T20:18:34.453 に答える
0

アーカイブ ページを変更しようとしましたが、投稿を 2 回クエリすることになったので、「parse_query」を接続して、クエリが正しい場合に情報による順序を追加しました。

後で正しいものをより適切に定義する必要があるかもしれませんが、今のところ問題なく動作し、クエリは 1 回だけ実行されています。

add_action('parse_request', 'event_sort');

function event_sort($a)
{
   if($a->query_vars AND count($a->query_vars) == 1 AND $a->query_vars['post_type'] == 'events')
   {
      $a->query_vars['meta_key'] = 'Datum';
      $a->query_vars['orderby'] = 'meta_value';
      $a->query_vars['order'] = 'ASC';
   }
}

parse_request私が使用する前にparse_query

add_action('parse_query', 'event_sort');

function event_sort($a)
{
   if($a->query AND count($a->query) == 1 AND $a->query['post_type'] == 'events')
   {
      global $wp_query;
      $wp_query->set('meta_key', 'Datum');
      $wp_query->set('orderby', 'meta_value');
      $wp_query->set('order', 'ASC');
   }
}
于 2012-11-06T20:25:24.220 に答える