Como posso reduzir a quantidade de ifs e, senão, se nesse bloco específico de código?

Eu tenho algum código no meu loop que determinará o termo na minha taxonomia personalizada, se for um termo específico, ele produzirá uma imagem específica.

 <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-scolors-thumbs/10.jpeg" />  

Isso funciona exatamente como eu quero que funcione, mas depois disso, eu tenho outra coisa se for se o termo for 9.5, 9, 8.5 … 1. Isso é muito mais, e não tenho certeza se será Bom para a velocidade do meu site. Para corrigir isso, eu estava pensando em obter o termo da publicação atual (eu estou fazendo isso dentro de um loop de página de arquivo personalizado), então fazendo algo assim.

 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-scolors-thumbs/$term.jpeg" />  

Isso funcionaria, dado que meus jpegs são todos chamados assim, mas estou tendo dois problemas. get_term é estranho. Eu pensei que iria retornar apenas um termo, mas quando eu fizer isso.

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

Ele mostra que funcionou a todos, mesmo quando o termo é 9 ou 8 para essa coisa específica.

Então, além disso, parece que não posso fazer

 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-scolors-thumbs/$term.jpeg" />  

Porque $ termo está nas citações.

Então, é o que estou fazendo possível? É mesmo valer a pena (ou seja, está usando todos os outros se for ruim)? E como funciona get_term?

Solutions Collecting From Web of "Como posso reduzir a quantidade de ifs e, senão, se nesse bloco específico de código?"

Você está fazendo tudo errado

  • get_term() é a function errada para usar para obter termos anexados a uma publicação. get_term() é usado para obter o termo object do db para um determinado termo ID. O primeiro parâmetro aceita o termo ID e não o ID da postagem. Você quer usar get_the_terms() para obter os termos anexados a uma postagem

  • Você realmente não precisa de nenhuma declaração if / else aqui, basta passar o termo ID / slug / nome como nome da imagem, dependendo da forma como suas imagens são nomeadas. Para responder os exemplos do eact como em OP, usei o termo id como nome da imagem. Mude isso para suas necessidades exatas.

  • Como já foi dito em outra resposta, você precisa == comparar dois valores, = atribuir um valor para outro ou para uma variável

Como você afirmou que has_term() funciona, então podemos fazer o seguinte, em seguida, para resolver o problema: ( Eu escrevi uma function que você pode adicionar em functions.phpo e depois chama a function dentro do loop onde for necessário )

NOTA:

Todo o código não foi testado e pode ser buggy. Certifique-se de testá-lo em uma instalação de teste com debugging definida como verdadeira. O código também requer um mínimo de 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-scolors-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 ''; } 

Dentro do loop, você pode chamar a function da seguinte maneira: ( Basta lembrar de passar o nome da taxonomia como primeiro parâmetro se você não estiver usando a construção na category taxonomia )

 echo get_term_related_image( 'review-score' ); 

EDITAR:

O código agora está testado e funciona como esperado

Primeiro, vamos pegar a sorting atual, get_term exige um termo ID, que não temos, então, use o wp_get_object_terms vez disso

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

O código até agora assumiu que haverá um único termo, o que é ruim. Mas vamos trabalhar com essa suposição por causa desta resposta e dizer que estamos lidando apenas com o primeiro termo:

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

$terms é uma lista de objects de termo, portanto, assegure-se de que a lista não esteja vazia e que não seja um erro. Se assim for, então não queremos abortar, e fazer outra coisa.

Aqui $term é uma variável que representa um object WP_Term , você está usando a slug para manter a pontuação da revisão, então você precisa:

  $term->slug 

Você pode procurar isso usando o WordPress Codex e o Developer Hub oficial.

Saída do termo

Em PHP, não basta indicar o nome de uma variável em html, você deve fazer eco, então isso não funcionará:

 The term is: $term->slug  

Você não abriu nenhuma tag PHP, então nenhum PHP é executado e você não colocou uma declaração de eco para ecoar assim:

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

Com esta informação, você pode corrigir o seu bloco de código final para fazer o que deseja.

Outros erros

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

Aqui você fez uma tarefa. O código lê “make $ term equal to then, then that makes making 10 bit worked”, então sempre é verdade. Em vez disso, use == que significa equivalente, ou === que significa exatamente igual a.

Em vez disso, sugiro trocar a ordem em torno de:

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

Desta forma, se você acidentalmente digitar = vez de == ele irá gerar um erro PHP, em vez de causar um erro de lógica oculta, e o problema será imediatamente óbvio