web-dev-qa-db-ja.com

Get_categoriesに対するユーザー定義の順序

以下は、私たちのフロントページのポストループに特定のカテゴリを呼び出すための基本的なコードです。私のクライアントがカテゴリを特定の順序で表示したい場合を除いて、それはうまくいきます。インターネット上でこれに関する他の投稿があることを私は知っています、しかし私はそれが私のクライアントが求めている方法でそれに対処したものを見ませんでした。

以下のコードで作成された$ categories変数を使用して、それらのオブジェクトを新しい配列に呼び出すことができますか?

この例では、すべてのオブジェクトの前に次のような番号があります。

[0] => values
[1] => values
[2] => values
....

出力がダンプされたとき。

その出力を取り出して、必要な順序でそれらを呼び出すことができますか? (例:1,3,4,2,5,0)

現在のコード:

`

    wp_reset_postdata();        
    /* top stories end */           

     $args = array(

        'child_of'                 => 0,
        'parent'                   => '',
        'hide_empty'               => 1,
        'hierarchical'             => 1,
        'orderby'                  => 'id',
        'order'                    => 'ASC',
        'include'                  => '12,13,14,15,16,1',
    ); 

     $categories = get_categories( $args );
 ?>

<?php
    echo '<div class="home-all-cat">';
     foreach( $categories as $cat)
     {
        $slug = $cat->slug ;
        echo '<div class="home-cat-item" >'; 
        echo '<span class="cat-title">'.$cat->name.'</span><span class="cat-archive-link"><a target="_blank" href="'.get_category_link( $cat->cat_ID ).'" title="'.$cat->name.'">Show all '.$cat->name.'</a></span>';
        echo do_shortcode('[blog number_posts="6" cat_slug="'.$slug.'" exclude_cats="1" title="" thumbnail="" excerpt="" excerpt_words="20" meta_all="no" meta_author="" meta_categories="" meta_comments="" meta_date="" meta_link="" paging="" scrolling="" strip_html="" blog_grid_columns="" layout="medium"][/blog]');
        echo '</div>';

     }
     echo '<div class="clear">';
     echo '</div>';
 ?>

`

1
Garrett

これを行う最も安全で簡単な方法は、返される配列の最初の値を設定解除し、それをforeachループの前に返される配列の最後に追加することです。

これが機能するには、カテゴリID 1を取得してそれを後ろに追加する必要があるため、カテゴリをIDでソートする必要があります。このような何かがうまくいくでしょう

<?php
$args = array(
    'hierarchical'             => 1,
    'orderby'                  => 'id',
    'order'                    => 'ASC',
    'include'                  => '13,21,41,1',
); 

$categories = get_categories( $args );

$v = $categories[0];
    unset($categories[0]);
    $categories[0] = $v;


foreach( $categories as $cat) {
    echo $cat->slug ;
}
?>
1
Pieter Goosen