web-dev-qa-db-fra.com

Trier les messages par catégorie?

Googlé cela pendant des heures, ne peut pas trouver une solution.

Sur mon theme vous avez une page Browse qui extrait toutes les vidéos du type de message personnalisé avec lequel je travaille. Si un utilisateur crée 30 catégories, identifiez-les pour que les utilisateurs puissent trier les vidéos à l'aide des boutons de catégorie répertoriés en haut. S'ils cliquent sur Horror, ils souhaitent afficher toutes les vidéos Horror.

Comment puis-je trier mes vidéos à l'aide de catégories dans cette boucle?

BROWSE PAGE

Ma catégorie ul li a

<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();
  ?>

Je suis un peu perdu sur la façon de procéder. Rien de ce que j'ai essayé ne semble trier la boucle, et les méthodes que j'ai utilisées ont été dépassées de 1 à 2 ans ...

Le site fonctionne bien pour mon premier thème, mais je ne sais pas comment faire en sorte que cette boucle soit triée en fonction de la catégorie sélectionnée. Des conseils ou des pointeurs?

Merci!

1
FlannelBeard

Vous avez le paramètre orderby dans votre requête, mais vous manquez le compagnon order. Cela donne une règle ascendante/descendante au tri.

WordPress Codex référence

1
jdm2112

Je n'arrive pas à comprendre la question, mais je suppose que le fragment de code que vous avez posté contenant query_posts se trouve dans un modèle de catégorie, d'archive ou d'index appelé lorsque vous suivez les liens générés par get_category_link (). Si tel est le cas, la fonction query_posts écrase la boucle par défaut, mais vous n'incluez pas la catégorie à filtrer afin de saisir toutes les publications de ce type de publication.

// 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 );

Sur un autre point, je suggérerais d’envisager d’utiliser le crochet pre_get_posts plutôt que la fonction query_posts.

1
Joey Yax

EDIT: Une réponse a été trouvée et je la poste pour toute autre personne ayant ce problème. Si vous avez de meilleures façons de le faire, veuillez poster ci-dessous pour le bénéfice des autres.

Placez ce code dans votre category.php. Il va automatiquement saisir la catégorie de l'URL et la passer au cat => $category_id et mettre à jour la boucle en conséquence.

<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