Verwendung von “Fällen” anstelle von “IFs” für bedingte Logik

Kürzlich habe ich Seiten für WordPress entwickelt, die zunehmend komplexer werden, aber auch viel mehr Traffic haben. Ich erinnere mich, als ich in PHP gelernt habe, dass in Fällen von Optimierung “Fälle” eine bessere Option als “IFs” sind, da sie den Server weniger belasten.

Es ist mir gelungen, in einigen functionen “Fälle” zu verwenden, aber wenn es darum geht, in Dateien wie single.php zu verwenden, bin ich kläglich gescheitert.

Also dachte ich, ich würde es an die Community weitergeben, um herauszufinden, wie einfach IF-Logik in WordPress-Schleifen mit “Fällen” optimiert werden kann.

Mein Code unten überprüft im Grunde, ob der geladene Inhalt für einen von sechs benutzerdefinierten Post-Typen ist, und abhängig davon, welcher Post-Typ es ist, werden dann unterschiedliche Parameter in die benutzerdefinierten functionen eingegeben.

if (is_singular('news')) { terms_by_order('news_category', array(3623)); if( false != get_the_term_list( $post->ID, 'news_column' ) ) { echo ' | ' . get_the_term_list($post->ID,'news_column', ' ', ' ', '' ); } } /*  */ if (is_singular('sports')) { terms_by_order('sports_category', array(3623)); if( false != get_the_term_list( $post->ID, 'sports_column' ) ) { echo ' | ' . get_the_term_list($post->ID,'sports_column', ' ', ' ', '' ); } } /*  */ if (is_singular('opinion')) { terms_by_order('opinion_category', array(3623)); if( false != get_the_term_list( $post->ID, 'opinion_column' ) ) { echo ' | ' . get_the_term_list($post->ID,'opinion_column', ' ', ' ', '' ); } } /*  */ if (is_singular('life')) { terms_by_order('life_category', array(3623)); if( false != get_the_term_list( $post->ID, 'life_column' ) ) { echo ' | ' . get_the_term_list($post->ID,'life_column', ' ', ' ', '' ); } } /*  */ if (is_singular('culture')) { terms_by_order('culture_category', array(3623)); if( false != get_the_term_list( $post->ID, 'culture_column' ) ) { echo ' | ' . get_the_term_list($post->ID,'culture_column', ' ', ' ', '' ); } } /*  */ if (is_singular('community')) { terms_by_order('community_category', array(3623)); if( false != get_the_term_list( $post->ID, 'community_column' ) ) { echo ' | ' . get_the_term_list($post->ID,'community_column', ' ', ' ', '' ); } } 

Solutions Collecting From Web of "Verwendung von “Fällen” anstelle von “IFs” für bedingte Logik"

Wenn Sie es für einzelne Vorlagen verwenden, ist der einfachste und effizienteste Weg, basierend auf dem Wert von get_post_type() zu wechseln.

 switch(get_post_type()) { case 'news' : // some statement for news type break; case 'sports' : // some statement for sports type break; default: // something to do when it's none of the above break; } 

Meiner Meinung nach wäre eine foreach hier ein Overkill (besonders wenn es viele Post-Typen wie in der Frage gibt)

Anstatt den Code für jeden Fall zu schreiben, extrahieren Sie einfach die posttypspezifischen Informationen wie den Kategorienamen oder den Spaltennamen (auch “Daten” genannt) in einem Array und trennen Sie ihn von der Logik (auch “Code” genannt). ):

 // here's the data - the key is the post type, the value is an array // with the column and category name (or any other post-type specific // information you have). $my_types = array( 'news' => array( 'category' => 'news_category', 'column' => 'news_column', // ... other post type specific parameters ), 'sports' => array( 'category' => 'sports_category', 'column' => 'sports_column', ), 'opinion' => array( 'category' => 'opinion_category', 'column' => 'opinion_column', ), 'life' => array( 'category' => 'life_category', 'column' => 'life_column', ), 'culture' => array( 'category' => 'culture_category', 'column' => 'culture_column', ), 'community' => array( 'category' => 'community_category', 'column' => 'community_column', ), // add more post types here ); $resultlist = array(); // and here's the actual logic which is executed // for every post type in the array. foreach($my_types as $typename => $type) { if(is_singular($typename)) { terms_by_order($type['category'], array(3623)); // just call "get_the_term_list" once $list = get_the_term_list($post->ID, $type['column'], ' ', ' ', ''); // check if it is a valid list - get_the_term_list could // return false or a WP_Error. if(!($list === false || is_wp_error($list))) { // instead of directly "echo" the list, collect it in an array $resultlist[] = $list; } } } // echo the list with the separator - that way you don't have // to manually track whether you have to echo a separator or not echo implode(' | ', $resultlist); 

Sie können es noch kürzer machen, wenn Sie sicher sind, dass der Kategoriename oder Spaltenname immer vom Post-Typ auf die gleiche Weise abgeleitet wird (wie bla => bla_category => bla_column).