Verwenden Sie is_category (), is_tag (), … in functions.php

Ich möchte in functions.php einchecken functions.php wenn die aktuelle Seite eine Kategorieseite, eine Tag-Seite, … ist, aber die zu überprüfenden functionen ( is_category() , is_tag() , …) scheinen nicht zu funktionieren Bedingung:

 if(is_category() || is_tag() || is_home()) 

niemals bestehen.

Zum Beispiel scheint is_category () nicht in der Schleife aufgerufen zu werden.

Irgendeine Idee, warum es nicht funktioniert und wie man es triggers?

Bearbeiten:

Das vollständige Beispiel für meinen Fall ist:

Innenfunktionen.php

 /* Add hentry class to body */ if(! function_exists( 'one_function' )) { function one_function( $classes ) { $classes[] = get_classes(); //this is a custom theme function which put the classes into an array. $classes[] = 'hentry'; return $classes; } if(is_category() || is_tag() || is_home()) add_filter( 'body_class', 'one_function' ); //this is executed if removing the "if" condition } 

Solutions Collecting From Web of "Verwenden Sie is_category (), is_tag (), … in functions.php"

Ihr Problem ist, dass Sie es nicht in einen Callback-Code eingefügt haben, sondern sofort ausgeführt haben, als functions.php von core geladen wurde. Bis dahin ist das globale $wp_query Objekt nicht vollständig initialisiert, und die Wrapper von is_category() usw. können nicht das liefern, was Sie von ihnen erwarten. Also sollten Ihre if / else-Checks wie folgt innerhalb des Callbacks verschoben werden:

 add_filter( 'body_class', 'addBodyClasses' ); function addBodyClasses( $classes ) { if ( is_category() || is_tag() || is_home() ) { $classes = array_merge( $classes, array( 'hentry', // other classes you want to add go here ) ); } return $classes; }