it-swarm.com.de

Beiträge nach Taxonomiebedingungen sortieren?

Ich frage mich, wie ich Code schreiben soll, um eine Liste der Posts nach ihren Begriffen aus benutzerdefinierten Taxonomien zu bestellen.

Hier ist was ich bisher habe :

  • Ich habe eine Seite, auf der alle Beiträge in einem benutzerdefinierten Beitragstyp auf einer Seite aufgelistet sind.
  • Unter jedem CPT-Beitrag habe ich die anzuzeigenden benutzerdefinierten Taxonomien abgerufen.
  • Ich habe zugelassen, dass die CPT-Posts nach Alpha, ASC und DESC sortiert sind.

Am Ende sieht es so aus:  enter image description here 

Das Ziel :

Ich möchte ein paar Links mit den "Sort By Title" hinzufügen, die ich bereits habe.

Insbesondere möchte ich nach (Alpha) Director, Studio und Episoden bestellen, da ich weiß, dass dies entweder Zeichenfolgen oder Zahlen sind.

Ich würde auch gerne nach der Premiered-Saison bestellen, aber möglicherweise muss ich die Art und Weise ändern, in der ich diese Begriffe benannt habe (es wird wahrscheinlich nur Winter 2011, Winter 2012 so ausspucken, wie es derzeit ist).

Das Sortieren nach Genre ist eine andere Sache, die ich wegen der vielen Begriffe nicht anpacken werde.

Ich bin mir nicht sicher, wie ich vorgehen soll und könnte die Hilfe gebrauchen.

Der aktuelle Code der Seite :

<div class="content-container">
<a href="?sort=titleup">Sort By Title A-Z</a>
<a href="?sort=titledown">Sort By Title Z-A</a>
<hr>

<?php
$type = 'animes';
$args=array(
'post_type' => $type,
'post_status' => 'publish',
'posts_per_page' => -1,
'caller_get_posts'=> 1
);

if( isset( $_GET['sort'] ) && "titleup" == $_GET['sort'] ){
$args['orderby'] = 'title';
$args['order'] = 'ASC';
}

if( isset( $_GET['sort'] ) && "titledown" == $_GET['sort'] ){
$args['orderby'] = 'title';
$args['order'] = 'DESC';
}

$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<div class="anime-title"><a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?> Page"><?php the_title(); ?></a></div>

<br><span>Director:</span>
<?php 
$taxonomy = 'director';
// get the term IDs assigned to post.
$post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
// separator between links
$separator = ', ';

if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) {

$term_ids = implode( ',' , $post_terms );
$terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=' . $term_ids );
$terms = rtrim( trim( str_replace( '<br />',  $separator, $terms ) ), $separator );

// display post categories
echo  $terms;
}
?>

<br><span>Studio:</span>
<?php 
$taxonomy = 'studio';
// get the term IDs assigned to post.
$post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
// separator between links
$separator = ', ';

if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) {

$term_ids = implode( ',' , $post_terms );
$terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=' . $term_ids );
$terms = rtrim( trim( str_replace( '<br />',  $separator, $terms ) ), $separator );

// display post categories
echo  $terms;
}
?>

<br><span>Season Premiered:</span>
<?php 
$taxonomy = 'season';
// get the term IDs assigned to post.
$post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
// separator between links
$separator = ', ';

if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) {

$term_ids = implode( ',' , $post_terms );
$terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=' . $term_ids );
$terms = rtrim( trim( str_replace( '<br />',  $separator, $terms ) ), $separator );

// display post categories
echo  $terms;
}
?>

<br><span>Episodes:</span>
<?php 
$taxonomy = 'episodes';
// get the term IDs assigned to post.
$post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
// separator between links
$separator = ', ';

if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) {

$term_ids = implode( ',' , $post_terms );
$terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=' . $term_ids );
$terms = rtrim( trim( str_replace( '<br />',  $separator, $terms ) ), $separator );

// display post categories
echo  $terms;
}
 ?>


<br><span>Genres:</span>
<?php 
$taxonomy = 'genre';
// get the term IDs assigned to post.
$post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
// separator between links
$separator = ', ';

if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) {

$term_ids = implode( ',' , $post_terms );
$terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=' . $term_ids );
$terms = rtrim( trim( str_replace( '<br />',  $separator, $terms ) ), $separator );

// display post categories
echo  $terms;
}
?>
<hr>

<?php
endwhile;
}
wp_reset_query();  // Restore global post data stomped by the_post().
?>

Sonstige Informationen :

Wenn Sie auf den Titel der Show klicken, wird der Leser zu einer anderen Seite weitergeleitet, auf der ein Bild der Show, die erneut aufgelisteten benutzerdefinierten Taxonomien und alle anderen Beiträge zu dieser Show angezeigt werden (verbunden durch das Tag als Name der Show). . Wenn beispielsweise ein Review- oder Diskussionsbeitrag mit dem Tag "Boys and Girls" (Jungen und Mädchen) vorhanden ist, wird er auf dieser Seite angezeigt.

Wenn Sie auf die Taxonomiebegriffe klicken, wird der Leser zu der Seite weitergeleitet, auf der alle Shows aufgelistet sind, die sich auf diesen Begriff beziehen. z. B. Alle Shows, die von diesem Studio gemacht wurden, alle Shows mit 12 Episoden, alle Shows unter dem Genre 'Action'.

Dies oben kann möglicherweise die Gesamtstruktur meiner Einrichtung in Frage stellen. Ich bin sehr neu in der Webentwicklung und in WordPress, deshalb habe ich mein Bestes gegeben, basierend auf den Recherchen, die ich gemacht habe.

Ich habe noch ein paar andere unbeantwortete Stack Exchange-Posts, die sich eingehender mit Details und Fragen zur Strukturierung dieses Teils der Website befassen. Hilfe ist auch dort erwünscht, oder wenn Sie weitere Erläuterungen zu dem, was ich versuche, benötigen.

Benutzerdefinierte Beitragstyp- und Taxonomiestruktur

Erstellen einer sortierbaren Tabelle nach Taxonomiebegriffen

Vielen Dank für Ihre Zeit und Ihre Hilfe.

3
Nimara

Der WordPress-Kern (wie mehrfach von Beteiligten zum Ausdruck gebracht) rät stark von der Sortierung nach Begriffen ab. Die Begriffe werden ausschließlich als grouping - Mechanismus betrachtet, ohne dass Bestellfunktionen impliziert sind.

In Ihrem speziellen Fall würde WP verstehen, dass es verschiedene Regisseure gibt, dass es Gruppen von Shows gibt, die von diesen Regisseuren durchgeführt werden, aber überhaupt nicht verstehen, dass eine gewisse Erwartung dahingehend besteht, wie die Reihenfolge der Shows sein kann beeinflusst von zugewiesenen Direktoren.

Natürlich müssen Menschen in der praktischen Entwicklung do unter verschiedenen Umständen nach Begriffen sortieren. In der Praxis bedeutet dies einige sehr benutzerdefinierte SQL-Anweisungen, um dies zu ermöglichen.

Eines der nützlichsten Beispiele für die Implementierung, die ich kenne, ist Sortierbare Taxonomiespalten Blogpost.

Um dies zu erreichen, müssten Sie notwendiges SQL schreiben/anpassen und dann in Ihre Abfragen einbinden.

4
Rarst

Während Rarsts Antwort richtig und hilfreich ist und Ihnen wirklich Raum für ein besseres Verständnis des Themas gibt, lautet die kürzeste praktische Antwort auf die Bestellung einer WP_Query mit einem custom_post_meta:

$args = array(
    'meta_key' => 'name',  //custom field name here
    'orderby' => 'meta_value', 
    'order' => 'ASC') // the sort order
    // the rest of your arguments here...
);

Wenn Sie eine andere benutzerdefinierte Sortierreihenfolge als ASC oder DESC benötigen, müssen Sie eine benutzerdefinierte Abfrage erstellen.


UPDATE: Meine Antwort hat nichts mit der Frage zu tun. Ich habe es einfach falsch gelesen. Es tut uns leid.

Ich werde es jedoch nicht löschen, da die Kommentare nützliche Informationen für alle enthalten, die sich noch nicht zwischen der Verwendung von custom_post_meta oder taxonomy für ein bestimmtes Attribut entschieden haben. Die Sortierung nach Taxonomiebegriff ist, wie Rarst ausgeführt hat, mit Scribus Abfrage (3., verbesserte Version) möglich. Sie sollten dies jedoch vermeiden, da dies die Geschwindigkeit Ihrer Abfragen beeinträchtigt.

Verwenden Sie terms zum Gruppieren und meta zum Sortieren. Ihre Website wird auch bei vielen Einträgen viel schneller.

2