Kategorieattribut funktioniert nicht in benutzerdefiniertem Shortcode

Ich habe die folgende function geschrieben, das Problem ist, wenn ich die Kategorie in meinem Shortcode einstelle, es ignoriert und alle Posts vom benutzerdefinierten Beitragstyp zeigt. Es funktioniert also nur irgendwie.

/*-------------------------------------------------------------- ## Resources Shortcode --------------------------------------------------------------*/ function resources_query( $atts ) { extract(shortcode_atts(array( 'category' => '', 'per_page' => -1, 'orderby' => 'date', 'order' => 'ASC' ), $atts)); $tax_query = array( 'taxonomy' => 'resources_categories', 'field' => 'slug', 'terms' => array( esc_attr($category) ), 'operator' => 'IN', ); $args = array( 'post_type' => 'resources', 'post_status' => 'publish', 'posts_per_page' => $per_page, 'orderby' => $orderby, 'order' => $order, 'tax_query' => $tax_query ); $resources_query = new WP_Query( $args ); if ( $resources_query->have_posts() ) : $html_out = '
'; while ( $resources_query->have_posts() ) : $resources_query->the_post(); $title = get_the_title(); $content = get_the_excerpt(); $pdf = get_field( "download_pdf" ); // Do stuff with each post here $html_out .= ''; endwhile; $html_out .= '
'; else : // No results $html_out = "No Resources Found."; endif; wp_reset_query(); return $html_out; } add_shortcode( 'show_resources', 'resources_query' );

So sieht mein Shortcode tatsächlich aus [show_resources category="post-surgery-information" per_page="-1"] . Ich bin mir nicht sicher, warum es es ignorieren und alle Beiträge zeigen würde. Ich habe mir andere Stack-Artikel angeschaut, um mir beim Einrichten zu helfen.

Solutions Collecting From Web of "Kategorieattribut funktioniert nicht in benutzerdefiniertem Shortcode"

Ich sehe also zwei Dinge, die zu dem Problem beitragen könnten:

  1. Ich bezweifle wirklich, dass Sie esc_attr für die Abfrage benötigen.
  2. Dies ist eine schwierige Aufgabe, aber tax_query muss ein Array von Arrays sein

Darauf basierend, glaube ich, wird das besser für Sie funktionieren:

 $tax_query = array( 'taxonomy' => 'resources_categories', 'field' => 'slug', 'terms' => array( $category ), // < -------- 'operator' => 'IN', ); $args = array( 'post_type' => 'resources', 'post_status' => 'publish', 'posts_per_page' => $per_page, 'orderby' => $orderby, 'order' => $order, 'tax_query' => array($tax_query) // < -------- ); 

Hoffe das hilft!

Ihre $tax_query muss ein Array von Steueranfrageargumentarrays sein:

 $tax_query = array( array( 'taxonomy' => 'resources_categories', 'field' => 'slug', 'terms' => array( esc_attr($category) ), 'operator' => 'IN' ) ); 

Weitere Informationen finden Sie unter https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters .