wake-up-neo.net

Fragen Sie den Taxonomietyp "Benutzerdefinierter Beitragstyp" basierend auf der Seite ab

Ich habe einen benutzerdefinierten Beitragstyp namens books. Dieser benutzerdefinierte Beitragstyp hat eine Taxonomie namens book_category. Ab sofort und in absehbarer Zeit gibt es 5 Kategorien, unter denen jedes Buch gefiltert werden kann.

Jetzt hat jede dieser Kategorien ihre eigene Seite, auf der die Bücher basierend auf der jeweiligen Kategorie abgefragt werden (neben anderen Zusatzinformationen zu jeder Kategorie).

In meinem Code unten habe ich versucht, Beiträge basierend auf is_page() abzufragen. Während dies funktioniert ... sagt mir etwas, dass es eine effizientere/richtigere Art gibt, damit umzugehen.

<?php
if (is_page('horror')) {
  $theTermBasedOnPage = 'horror';
} elseif (is_page('comedy')) {
  $theTermBasedOnPage = 'comedy';
} elseif (is_page('romantic')) {
  $theTermBasedOnPage = 'romantic';
} elseif (is_page('nonfiction')) {
  $theTermBasedOnPage = 'nonfiction';
} elseif (is_page('drama')) {
  $theTermBasedOnPage = 'drama';
}

$args = array(
  'posts_per_page' => -1,
  'post_type' => 'books',
  'post_status' => 'publish',
  'tax_query' => array(
      array(
          'taxonomy' => 'book_category',

          'terms' => $theTermBasedOnPage,
      ),
  ),
  );
?>

Was ist der beste Weg, um Beiträge (Custom Post Type> Taxonomy) basierend auf Seite abzufragen?

4
Joe

Um dies effizienter zu gestalten, platzieren Sie statt der Argumentation über den aktuellen Seitenbuckel einfach den aktuellen Buckel als den Begriffswert der tax_query. So etwas wie:

global $post;
$args = array(
  'posts_per_page' => -1,
  'post_type' => 'books',
  'post_status' => 'publish',
  'tax_query' => array(
      array(
          'taxonomy' => 'book_category',
          'field'    => 'slug',
          'terms'    => $post->post_name, // which'd be `horror` or `comedy`, etc
      ),
  ),
);

Beachten Sie, dass es sehr wahrscheinlich ist, dass menschliches Versagen die Dinge auf diese Weise erledigt: Zum Beispiel kann eine Seite mit nonfiction, aber ein book_category-Ausdruck mit non-fiction die Logik brechen und Probleme verursachen.

Ich kenne den Kontext nicht, an dem Sie arbeiten, aber wenn das Ziel nur "jede dieser Kategorien hat ihre eigene Seite" ist, müssen Sie diese benutzerdefinierte Abfrage nicht mit erstellen -manual-page-relation für jeden begriff. WordPress-Taxonomien und -Begriffe haben ihre eigenen URLs, wenn Sie registriert die Taxonomie als public und publicly_queryable haben. (Vermutung hier, aber) Sie können wahrscheinlich your-site.com/book_category/horror/ besuchen und die Liste der Horrorbücher sehen. Sie können dann die Vorlagendateien für alle Begriffe oder einzeln anpassen, indem Sie die WordPress-Vorlagenhierarchie als Referenz verwenden.

3
David Sword

Benutzerdefinierte Taxonomie-Seiten:

Sie müssen keine benutzerdefinierte Abfrage mit $args erstellen, um die benutzerdefinierten Taxonomieseiten abzurufen. Sie können einfach der von WordPress bereitgestellten URL-Struktur folgen.

Sagen wir zum Beispiel:

  1. Sie haben folgende Permalink-Struktur ausgewählt:  enter image description here 

  2. Dann haben Sie einen benutzerdefinierten Beitragstyp Book erstellt.

  3. Erstellt benutzerdefinierte Taxonomie Book Category und verknüpft mit Book.

  4. Erstellen Sie dann eine neue Book mit dem Titel My Horror Story unter Horror als Book Category.

  5. Außerdem wurde eine weitere neue Book mit dem Titel My Comedy Story unter Comedy als Book Category erstellt.

Mit allen anderen Standardeinstellungen generiert WordPress automatisch die folgenden URLs für Sie:

// Book Links
https://example.com/book/my-comedy-story/
https://example.com/book/my-horror-story/

// Book Category Links
https://example.com/book-category/comedy/
https://example.com/book-category/horror/

Verwenden Sie diese URLs für Ihre gewünschten benutzerdefinierten Taxonomieseiten.

Vorlage

Sie können auch die Designvorlagendateien bearbeiten, um das gewünschte Design zu erstellen. Schauen Sie sich WordPress Template Hierarchy an, um zu erfahren, wie das geht.

Beispielsweise können Sie eine Vorlagendatei mit dem Namen taxonomy-book-category.php erstellen, um benutzerdefinierte Taxonomieseiten für Book Category zu entwerfen.

Verwenden Sie in dieser Vorlagendatei WordPress Template Tags und The Loop für erforderliche Abfragen.

Eine sehr einfache Vorlagendatei kann beispielsweise folgendermaßen aussehen:

<?php
    if ( have_posts() ) : while ( have_posts() ) : the_post();
        the_content();
    endwhile;
    else :
        _e( 'Sorry, no book matched your criteria.', 'textdomain' );
    endif;
?>
2
Scott

Versuche dies:

<?php
// Get post's all terms.
$terms = wp_get_post_terms( get_the_ID(), 'book_category' );

// Get first term ID
$currentPostTermID = $terms[ 0 ]->term_id;

$args = array(
    'posts_per_page' => -1,
    'post_type'      => 'books',
    'post_status'    => 'publish',
    'tax_query'      => array(
        array(
            'taxonomy' => 'book_category',

            'terms' => $currentPostTermID,
        ),
    ),
);
?>
0
bilimokur