Archivvorlagen basierend auf Taxonomien

Ich habe einen benutzerdefinierten Post-Typ, Service-Provider, mit zwei Taxonomien, Bereich und Service. Ich wollte eine Vorlage basierend auf den Taxonomien erstellen.

function template_taxonomy($template) { if (is_archive()) { if ((is_tax('service') and is_tax('area')) or is_tax('service')) { $template = locate_template( array( 'taxonomy_service.php' ) ); } else if (is_tax('area') and !(is_tax('service'))) { $template = locate_template( array( 'taxonomy_area.php' ) ); } } return $template; } 

Der Code ist ziemlich einfach, aber mein Problem ist, wenn ich versuche, diese URL zu besuchen

http://www.site.com/?service-provider&service=electricians&area=north-shore-lower

Die Servicetaxonomie scheint nicht zu existieren. Daher wird die taxonomy_area.php-Vorlage verwendet. Auch versucht, nur die taxonomy_service.php Vorlage zu verwenden und es scheint, als ob die Bereichstaxonomie auch nicht in dieser Vorlage existiert.

Irgendwelche Ideen?

Solutions Collecting From Web of "Archivvorlagen basierend auf Taxonomien"

Wenn Sie eine Liste mit Posts anzeigen möchten, die zu zwei oder mehr Taxonomiebegriffen gehören, verwenden Sie die falsche URL. Wenn Sie hübsche Permalinks verwenden, sollte es sein:

  www.example.com/service-provider/?service=electricians&area=north-shore-lower 

Wenn Sie keine schönen Permalinks verwenden, sollte es sein:

  www.example.com/?post-type=service-provider&service=electricians&area=north-shore-lower 

Wie auch immer, es wird erwartet, dass Sie in der Archivseite von multitax sind, und Sie können es nicht mit is_tax() überprüfen, einer function, die nach einem einzelnen Taxonomiearchiv is_tax() soll. Sie können einige Alternativen verwenden, z. B. das tatsächliche $ wp_query-Objekt überprüfen:

 add_filter('template_include', 'wpse_multietax_template'); function wpse_multietax_template( $template ){ global $wp_query; if( (isset($wp_query->query_vars['service']) && isset($wp_query->query_vars['area'])) || isset($wp_query->query_vars['service']) ) { $template = locate_template( array( 'taxonomy_service.php' ) ); } else if ( isset($wp_query->query_vars['area']) && !isset($wp_query->query_vars['service']) ) { $template = locate_template( array( 'taxonomy_area.php' ) ); } return $template; }