Wie kann ich die Anzahl der IFS und IFS in diesem spezifischen Codeblock reduzieren?

Ich habe Code in meiner Schleife, der den Begriff in meiner benutzerdefinierten Taxonomie bestimmt, wenn es ein bestimmter Begriff ist, wird es ein bestimmtes Bild ausgeben.

 <a href="https://wordpress.stackexchange.com/questions/210975/how-can-i-reduce-amount-of-ifs-and-else-ifs-in-this-specific-block-of-code/" title=""> <img src="https://wordpress.stackexchange.com/questions/210975/how-can-i-reduce-amount-of-ifs-and-else-ifs-in-this-specific-block-of-code/ /images/review-scores-thumbs/10.jpeg" />  

Es funktioniert genau so, wie ich es will, aber danach habe ich eine andere, wenn, wenn der Begriff 9,5, 9, 8,5 … ist. 1. Das ist eine Menge anderer Wenns, und ich bin mir nicht sicher, dass es sein wird gut für die Geschwindigkeit meiner Website. Um dies zu beheben, dachte ich darüber nach, den Begriff des aktuellen Posts zu erhalten (ich mache das in einer benutzerdefinierten Archivseitenschleife) und mache dann so etwas.

 ID, 'review'score'); ?> <img src="https://wordpress.stackexchange.com/questions/210975/how-can-i-reduce-amount-of-ifs-and-else-ifs-in-this-specific-block-of-code/ /images/review-scores-thumbs/$term.jpeg" />  

Das würde funktionieren, wenn meine JPEGs alle so genannt werden, aber ich habe zwei Probleme. get_term ist komisch. Ich dachte, es würde nur einen Begriff zurückgeben, aber wenn ich das tue.

 ID, 'review-score'); ?>  It worked  

Es zeigt an, dass es funktioniert, auch wenn der Begriff 9 oder 8 für diese spezielle Sache ist.

Darüber hinaus scheint es, dass ich es nicht tun kann

 ID, 'review-score'); ?> <img src="https://wordpress.stackexchange.com/questions/210975/how-can-i-reduce-amount-of-ifs-and-else-ifs-in-this-specific-block-of-code/ /images/review-scores-thumbs/$term.jpeg" />  

Weil $ term in den Anführungszeichen steht.

Also, was mache ich? Ist es das überhaupt wert (dh, benutzt man alle anderen, wenn es so schlimm ist)? Und wie funktioniert get_term?

Solutions Collecting From Web of "Wie kann ich die Anzahl der IFS und IFS in diesem spezifischen Codeblock reduzieren?"

Du machst alles falsch

  • get_term() ist die falsche function, mit der Begriffe an einen Post angehängt werden. get_term() wird verwendet, um das Term-Objekt aus der database für eine gegebene Term-ID get_term() . Der erste Parameter akzeptiert den Begriff ID und nicht die Post-ID. Sie möchten get_the_terms() , um die Bedingungen an einen Beitrag get_the_terms()

  • Sie brauchen hier wirklich keine if / else-statementen, einfach den Begriff ID / slug / name als Bildnamen übergeben, abhängig davon, wie Ihre Bilder benannt sind. Für die Beantwortung der eact-Beispiele wie in OP habe ich den Begriff id als Bildname verwendet. Ändern Sie dies auf Ihre genauen Bedürfnisse.

  • Wie bereits in einer anderen Antwort erwähnt, benötigen Sie == , um zwei Werte zu vergleichen, = weist einen Wert einem anderen oder einer Variablen zu

Wie Sie festgestellt haben, has_term() , so dass wir folgendes tun können, um das Problem zu lösen: ( Ich habe eine function geschrieben, die Sie in functions.phpo hinzufügen können und dann die function innerhalb der Schleife aufrufen, wo sie benötigt wird )

HINWEIS:

Der gesamte Code ist nicht getestet und möglicherweise errorshaft. Stellen Sie sicher, dass Sie es bei einer Testinstallation testen, wobei debug auf “true” gesetzt ist. Der Code erfordert auch mindestens PHP 5.4

 function get_term_related_image( $taxonomy = 'category' ) { // Invoke the global $post object global $post; // Check if we have a taxonomy and if it is valid, else return false if ( !$taxonomy ) return false; if ( $taxonomy !== 'category' ) $taxonomy = filter_var( $taxonomy, FILTER_SANITIZE_STRING ); // Get the terms assigned to the post $terms = get_the_terms( $post->ID, $taxonomy ); // Make sure we actually have terms, if not, return false if ( !$terms || is_wp_error( $terms ) ) return false; // Get the first term from the array of terms $term = $terms[0]; // Get the image $image = get_stylesheet_directory_uri() . '/images/review-scores-thumbs/' . $term->term_id . '.jpeg'; // Check if we actually have an image before returning it if ( !getimagesize( $image ) ) return false; // We have made it, YEAH!!!, return the image $permalink = get_the_permalink( $post ); $title_attr = the_title_attribute( ['echo' => false, 'post' => $post] ); return ''; } 

Innerhalb der Schleife können Sie die function einfach wie folgt aufrufen: ( Denken Sie daran, den Taxonomy-Namen als ersten Parameter zu übergeben, wenn Sie nicht die Taxonomie- category Build category ).

 echo get_term_related_image( 'review-score' ); 

BEARBEITEN:

Der Code ist jetzt getestet und funktioniert wie erwartet

get_term wir als Erstes die tatsächliche Bewertung, get_term erfordert eine Begriffs-ID, die wir nicht haben, also verwenden wp_get_object_terms stattdessen wp_get_object_terms

 $terms = wp_get_object_terms($post->ID, 'review-score' ); 

Der Code hat bisher angenommen, dass es einen einzelnen Begriff geben wird, der schlecht ist. Aber lassen Sie uns für diese Antwort mit dieser Annahme arbeiten und sagen, dass wir uns nur mit dem ersten Begriff beschäftigen:

 if ( !empty( $terms ) && !is_wp_error( $terms ) ) { $term = $terms[0]; 

$terms ist eine Liste von Termobjekten. Stellen Sie also sicher, dass die Liste nicht leer ist und dass es sich nicht um einen Fehler handelt. Wenn es so ist, dann wollen wir abbrechen und etwas anderes tun.

Hier ist $term eine Variable, die ein WP_Term Objekt darstellt. Sie verwenden den Slug, um den Review-Punktestand zu halten. Sie benötigen also:

  $term->slug 

Sie können dies mit dem WordPress Codex und dem offiziellen Developer Hub nachschlagen.

Ausgabe des Begriffs

In PHP ist es nicht genug, den Namen einer Variablen in html anzugeben, Sie müssen es aussprechen, damit das nicht funktioniert:

 The term is: $term->slug  

Sie haben keine PHP-Tags geöffnet, also wird kein PHP ausgeführt, und Sie haben keine echo-statement geschrieben, um es so auszuhacken:

 The term is: < ?php echo $term->slug; ?>  

Mit diesen Informationen sollten Sie in der Lage sein, Ihren endgültigen Codeblock zu korrigieren, um das zu tun, was Sie wollen.

Andere Fehler

 < ?php if ($var = '10') { ?> 

Hier hast du eine Aufgabe gemacht. Der Code lautet “mach $ term gleich dann, dann dass es 10 Bit funktioniert”, also ist es immer wahr. Verwenden Sie stattdessen == was gleichbedeutend ist, oder === was genau gleichbedeutend ist.

Stattdessen schlage ich vor, die Reihenfolge zu tauschen:

 < ?php if ( '10' == $var ) { 

Auf diese Weise wird, wenn Sie versehentlich = anstelle von == , ein PHP-Fehler generiert, anstatt einen versteckten logischen Fehler zu verursachen, und das Problem wird sofort offensichtlich