web-dev-qa-db-ja.com

投稿をカテゴリ別に並べ替えますか?

何時間もこれをグーグル、解決策を見つけることができません。

私の テーマ あなたは私が働いているカスタム投稿タイプからすべてのビデオを引っ張るBrowseページを持っています。ユーザーが30のカテゴリを作成した場合、ユーザーが一番上に表示されている[カテゴリ]ボタンを使用して動画をソートできるようになります。 Horror idをクリックすると、ループしてすべてのHorrorビデオを表示します。

このループ内でカテゴリを使用して動画を並べ替えるにはどうすればよいですか。

ブラウズページ

私のカテゴリー

<ul class="sort-by-category">
    <?
      $args = array(
            'orderby' => 'name',
            'parent' => 0
      );
      $categories = get_categories( $args );
      foreach ( $categories as $category ) {
        echo '<li><a class="browse-categories" href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a></li>';
      }
    ?>
  </ul>
<? 
    // Our variables
    $numPosts = (isset($_GET['numPosts'])) ? $_GET['numPosts'] : 0;
    $page = (isset($_GET['pageNumber'])) ? $_GET['pageNumber'] : 0;

    query_posts(array(
          'posts_per_page' => $numPosts,
          'paged'          => $page,
          'post_type'      => 'theme_video'
    ));

    // our loop
    if (have_posts()) {
          while (have_posts()){
                the_post();
                get_template_part( 'partials/content', 'browse' );
          }
    }
    wp_reset_query();
  ?>

進め方がわからない。私が試したものは何もループをソートするようには思えません、そして私が使用した方法は1 - 2年で時代遅れになっています...

私の最初のテーマではサイトはうまく機能しますが、選択したカテゴリでこのループをソートする方法がわかりません。ヒントやポインタはありますか?

ありがとうございます。

1
FlannelBeard

クエリにorderbyパラメータがありますが、コンパニオンorderがありません。これはソートに昇順/降順の規則を与えます。

ワードプレス コーデックス reference

1
jdm2112

質問を理解できませんが、投稿したquery_postsを含むコードスニペットが、get_category_link ()によって生成されたリンクを追跡するときに呼び出されるカテゴリ、アーカイブ、またはインデックステンプレートのいずれかであると想定しています。もしそうなら、query_posts関数はデフォルトのループを無効にしています、しかしあなたはそれによってそのポストタイプのすべてのポストをつかんでいるのでフィルタするカテゴリを含んでいません。

// Our variables
$numPosts = (isset($_GET['numPosts'])) ? $_GET['numPosts'] : 0;
$page = (isset($_GET['pageNumber'])) ? $_GET['pageNumber'] : 0;

// build query
$args = array(
  'posts_per_page' => $numPosts,
  'paged'          => $page,
  'post_type'      => 'theme_video'
);

// get category ID
$cat_id = get_query_var( 'cat' );

// add category to query if an id is found
if ( $cat_id != '' ) {
  $cat = get_category ( $cat_id );
  $args['category'] = $cat->slug;
}

// go!
query_posts( $args );

pre_get_posts関数とは対照的にquery_postsフックの使用を検討することをお勧めしません。

1
Joey Yax

編集: 答えが見つかりました。この問題を抱えている人のために投稿しています。あなたがこれを達成するより良い方法があるならば、他の人の利益のために以下に投稿してください。

このコードをあなたの category.phpに入れてください。 URLからカテゴリを自動的に取得してcat => $category_idに渡し、それに応じてループを更新します。

<ul class="sort-by-category">
<?
  $args = array(
        'orderby' => 'name',
        'parent' => 0
  );
  $categories = get_categories( $args );
  foreach ( $categories as $category ) {
    echo '<li><a class="browse-categories" href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a></li>';
  }
?>
</ul>

<?
    // Our variables
    $page = (isset($_GET['pageNumber'])) ? $_GET['pageNumber'] : 0;

    // grab slug from url
    $category_id = get_query_var('cat');

    // define args
            $args = array( 
                        'posts_per_page' => '36',
          'paged'          =>  $page,
          'post_type'      => 'theme_video',
          'cat'            =>  $category_id
     );

            // place args in query
            $category_posts = new WP_Query($args);

            // our loop
            if($category_posts->have_posts()) { 
            while($category_posts->have_posts()) { 
                    $category_posts->the_post();
                    get_template_part( 'partials/content', 'browse' );
            }
    } 
    wp_reset_query();
?>
1
FlannelBeard