Iterate durch benutzerdefinierte Post-Typ durch benutzerdefinierte Taxonomie Typ? (Bestellwordpress Beiträge Kategorie oder benutzerdefinierte Post Art von Taxonomieausdruck Anzeige)

StackOverflow https://stackoverflow.com/questions/3848608

  •  27-09-2019
  •  | 
  •  

Frage

Ich möchte eine Seite haben, dass zeigt alle Beiträge nach Kategorien getrennt. Die Idee ist, die Kategorien zu bekommen, und dann durch alle Beiträge für jede Kategorie laufen. Das Problem wird durch die Tatsache erschwert, dass ich durch alle Beiträge eines bestimmten benutzerdefinierten Typ iterieren möchten, eine benutzerdefinierte Taxonomie als die Kategorien verwenden. (Ausführen von Wordpress 3)

In meinem functions.php, mein benutzerdefinierter Post-Typ wird als "video" registriert und die benutzerdefinierten Taxonomie als "video_types".

In meiner benutzerdefinierten Seitenvorlage, die angeblich alle Videos nach Kategorien angeordnet zeigen, das ist der Code, der keine Beiträge zurückkehrt (und sie sind da, ich markiert):

<?php 
  $categories = get_categories(array(
    'taxonomy' => 'video_types'
  )); 
  foreach ($categories as $cat):
?>
 <section id="<?php $cat->slug ?>" class="video-category">
     <?php
  query_posts(array(
      'cat' => $cat->cat_ID,
      'posts_per_page' => -1
         ));
     ?>
     <h2><?php single_cat_title(); ?></h2>
    <p class="description"><?php echo category_description($cat->cat_ID); ?></p>
  <?php while (have_posts()) : the_post(); ?>
      <?php
       $category = get_the_category(); 
            echo $category[0]->cat_name;
      ?>
      <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
      <article class="video">
        <h3><?php the_title(); ?></h3>
        <p>
          <?php the_content() ?>
        </p>
      </article>
  <?php endwhile; ?>
 </section>
<?php endforeach; ?>
War es hilfreich?

Lösung

Meine Güte, wenn Sie herausfinden, dass jedes Element eines benutzerdefinierten Taxonomie einen Begriff genannt wird (nicht sofort offensichtlich in der Wordpress-Dokumentation für die Noob), es ist alles viel einfacher zu suchen. Diese Lösung ist einfacher, ohne all die benutzerdefinierte Abfrage Sachen zu verstehen.

<?php
// A term is an item of a taxonomy (e.g. "Promotional" could be a term for the taxonomy "video_type")
// ...so $categories could be $terms and it would still make sense
$categories = get_terms('taxonomy_name');
foreach( $categories as $category ):
?>
  <section class="category-<?php echo $category ?>">
    <h2><?php echo $category->name; // Print the cat title ?></h2>
    <p class="description"><?php echo $category->description ?></p>
    <div class="<?php echo $category->post_type ?>-list">
      <?php
      //select posts in this category (term), and of a specified content type (post type) 
      $posts = get_posts(array(
        'post_type' => 'custom_post_type_name',
        'taxonomy' => $category->taxonomy,
        'term' => $category->slug,
        'nopaging' => true, // to show all posts in this category, could also use 'numberposts' => -1 instead
      ));
      foreach($posts as $post): // begin cycle through posts of this category
        setup_postdata($post); //set up post data for use in the loop (enables the_title(), etc without specifying a post ID)
      ?>
        // Now you can do things with the post and display it, like so
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
          <h3><?php the_title(); ?></h3>
          <?php 
            // Getting custom field data example
            echo get_post_meta($post->ID, 'field_key', true); 
          ?>
          <?php the_content() ?>
        </article>
      <?php endforeach; ?>
    </div>
  </section>
<?php endforeach; ?>

Und dann können Lücken in Verständnis durch Durchsuchen der Funktionen, die oben in dem Wordpress Codex gefüllt werden. In dem obigen Code, für meine spezielle Anwendung, custom_post_type_name Video wäre, und taxonomy_name wäre video_type (oder video_types ich vergessen).

Andere Tipps

Sie könnten einen anderen Ansatz versuchen. Versuchen Sie get_posts mit Ihren Beiträgen Ihrer benutzerdefinierten Taxonomie sortierten zu bekommen, eine Variable einrichten, die zunächst eine leere Zeichenfolge ($ current_cat oder etwas genannt), und mit jeder Schleife der Ergebnisse, überprüfen Sie die Taxonomie und vergleichen Sie es mit $ current_cat - wenn anders, einen Header für die neue Kategorie ausdrucken und dann dem Eintrag, wenn das gleiche, einen Eintrag wie gewohnt ausdrucken.

Ein klares Problem mit Ihrem Code (glaube ich) ist, dass Sie nicht richtig Ihre benutzerdefinierte Taxonomie abfragt. Sie sollten durch taxonomy_name => 'value' in einer Abfrage in Ihrer Abfrage verwenden, eine benutzerdefinierte Taxonomie einfach cat nicht berührt werden.

Lassen Sie mich wissen, wenn Sie mehr Details benötigen.

edit: Mehr Detail!

// get a list of categories, in this case your custom taxonomy (your_taxonomy_name)
$querystr = "SELECT terms.* FROM $wpdb->term_taxonomy tax LEFT JOIN $wpdb->terms terms ON tax.term_id = terms.term_id WHERE tax.taxonomy = 'your_taxonomy_name'";

$categories = $wpdb->get_results($querystr, OBJECT);

foreach( $categories as $category ): // begin a loop through those terms (categories in your custom taxonomy)
    echo '<div class="category-header"><h3>'.$category->name.'</h3>'; // print the cat title
    echo '<p class="category-description">'.strip_tags(term_description($category->term_id,'your_taxonomy_name')).'</p></div>'; // cat description

    $posts = get_posts( array( 'your_taxonomy_name' => $category->name, 'post_type' => 'your_post_type' ) ) //select posts in this category, and of a specified content type
    foreach($posts as $post) : // begin cycle through posts of this category
        setup_postdata($post); //set up post data for use in the loop (enables the_title(), etc without specifying a post ID)

        [ ... ] // do things with your post (display it)

    endforeach;

endforeach;

Das sollte es tun -. Und diese hilfreich sein können get_posts für die Verwendung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top