it-swarm.com.de

Beiträge nach eigenen Taxonomiebedingungen filtern

Ich versuche, Beiträge nach Autor zu filtern. Der 'post_author' ist eine benutzerdefinierte Taxonomie und ich habe ihn in meine Argumente aufgenommen und Posts werden mit den verknüpften Autornamen angezeigt. Wenn ich jedoch auf den Link für den Autornamen klicke, werden alle Autoren angezeigt. Wie kann ich nur den angeklickten Autor anzeigen? Ich habe die relevanten Teile des Codes enthalten:

//ADD THE TAXONOMY 'post_authors' TO MY CUSTOM POST TYPE
function add_custom_taxonomies() {
   register_taxonomy('post_authors', 'my-post-type', array(
   'hierarchical' => true,
   'labels' => array(
   'name' => _x( 'Authors', 'taxonomy general name' ),
   'singular_name' => _x( 'Author', 'taxonomy singular name' ),
   'search_items' =>  __( 'Search Authors' ),
   'all_items' => __( 'All Authors' ),
   'parent_item' => __( 'Parent Author' ),
   'parent_item_colon' => __( 'Parent Author:' ),
   'edit_item' => __( 'Edit Author' ),
   'update_item' => __( 'Update Author' ),
   'add_new_item' => __( 'Add New Author' ),
   'new_item_name' => __( 'New Author Name' ),
   'menu_name' => __( 'Authors' ),
   ),
   // Control the slugs used for this taxonomy
   'rewrite' => array(
   'slug' => 'post-authors', // This controls the base slug that will display before each term
   'with_front' => false, // Don't display the category base before "/authors/"
   'hierarchical' => true // This will allow URL's like "/authors/lorem/ipsum/"
 ),
));
}
add_action( 'init', 'add_custom_taxonomies', 0 );


// and in my archive page......

//ARGS
$args = array( 
    'post_type' => 'my-post-type',
    'order' => 'DESC',
    'tax_query' => array(
        array(
            'taxonomy' => 'post_authors',
            'field'    => 'slug',
            'terms'    => 'Jill Jones',
        ),
    ),
);



//RETRIEVES AUTHOR NAME FROM CUSTOM TAXONOMY
$terms = get_the_terms( $post->ID, 'post_authors' );

if ($terms) {
    $terms_name = array();
    foreach ( $terms as $term ) {
    // The $term is an object, so we don't need to specify the $taxonomy.
    $term_link = get_term_link( $term );
    $terms_name[] = $term->name;
    // If there was an error, continue to the next term.
    if ( is_wp_error( $term_link ) ) {
      continue;
    }
}
$author_name = $terms_name[0]; 
}



//RETRIEVING THE AUTHOR NAME IN LOOP
if ( $post_typed == ('my-post-type') && $author_name  != '' )  {  echo '<a href="' . esc_url( $term_link ) . '    ">' . $author_name . '</a>'; } 
1
amespower

Dies wird erwartungsgemäß von dem ausgegeben, was Sie in Ihrem Code haben. Ändern Sie niemals die Hauptabfrage für eine benutzerdefinierte Abfrage auf einer Archivseite oder auf der Homepage. Benutzerdefinierte Abfragen sind immer problematisch, da die Hauptabfrage auf diesen Seiten sehr spezifisch ist.

Ich würde Ihnen raten, lieber pre_get_posts zu verwenden, um die Hauptabfrage auf der spezifischen Archivseite oder Homepage zu ändern, auf die Sie abzielen möchten, und die Standardschleife beizubehalten.

Auch Ihre Steuerabfrage ist völlig falsch. Es sollte ein Array eines Arrays sein. Bitte werfen Sie einen Blick auf die Erstellung einer Steuerabfrage in WP_Query

Weitere Informationen und ein besseres Verständnis finden Sie unter Meine Antwort Ich habe kürzlich eine ähnliche Art von Frage gestellt

Beispielcode (in functions.php platzieren und zur Standardschleife in taxonomy.php zurückkehren):

function custom_author_page( $query ) {
    if ( !is_admin() && $query->is_tax( 'post_authors' ) && $query->is_main_query() ) {

        $query->set( 'post_type', 'my-post-type' );
        $query->set( 'order', 'DESC' );

    }
}
add_action( 'pre_get_posts', 'custom_author_page' );

EDIT

Aus Ihren Kommentaren haben Sie Ihre Taxonomie-Vorlage taxonomy-post-author.php benannt, die sich auf die Taxonomie post und den Begriff author bezieht. Benennen Sie Ihre Taxonomie-Vorlage in taxonomy-post_authors.php um.

EDIT 2

OPTION 1

Ändern Sie Ihre Taxonomieseite auf die Standardschleife, keine benutzerdefinierte Schleife.

<?php 
if ( have_posts() ) {
    while ( have_posts() ) {
        the_post(); 
        //
        // Post Content here
        //
    } // end while
} // end if
?>

Ändern Sie die Hauptabfrage mit pre_get_posts wie oben. Dies ist die richtige Methode

OPTION 2

Rufen Sie den abgefragten Term mit get_queried_object('term'); ab und geben Sie den Slug des Terms zurück. PS! Dieser Code sollte in Taxonomieseiten verwendet werden

$queried_object = get_queried_object('term');
$term_slug = $queried_object->slug;

$term_slug als terms an tax_query zurückgeben

EDIT 3

Verwenden Sie get_terms() , um eine Reihe von Termnamen/Slugs/IDs aus einer bestimmten Taxonomie abzurufen.

$terms = get_terms('post_authors');

$term_names = array();

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

    foreach ( $terms as $key=>$term){
        $term_names[$key] = $term->name;
    }
}

Sie können dann einfach $term_names an terms übergeben.

'terms'    => $term_names

EDIT 4

Benutzen

<pre><?php var_dump($term_names); ?></pre>

um das Array zu drucken. Die Ausgabe wird so aussehen

array(6) {
  [0]=>
  string(12) "Admin se pen"
  [1]=>
  string(11) "Besprekings"
  [5]=>
  string(12) "Toets Parent"
  [6]=>
  string(15) "Uit die grapkas"
  [7]=>
  string(14) "Uit die koskas"
  [8]=>
  string(11) "Uit my lewe"
}
2
Pieter Goosen