Ayuda con uso de else if

  • Autor Autor tommy2032
  • Fecha de inicio Fecha de inicio
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

T

tommy2032

Eta
Social Media
Verificado por Whatsapp
pasa que estoy tratando de poner unos iconos en mi web que se muestren cuando esta en una determinada categoría, el problema es que cuando pongo dos o mas categoría no me muestra los icono pero si lo muestra si pongo solo una categoría si pongo dos no lo muestra

/////////////////////////////////////////////////Codigo///////////////////////////////////////////////////////
<div class="film-stats">
<ul>
<?php $idioma = get_the_term_list($post->ID, 'idioma', '', ', ', '');
$idioma = strip_tags( $idioma );
?>
<?php if($idioma == 'Subtitulada')
{
echo '<li class="Subtitulada"><div class="iSubtitulada"></div></li> ';
}
elseif($idioma == 'Español')
{
echo ' <li class="Castellano"><div class="iCastellano"></div></li> ';
}
elseif($idioma == 'Latino')
{
echo ' <li class="Latino"><div class="iLatino"></div></li>';
}
?>
<li class=""><div class="i"></div></li>
</ul>
</div>
/////////////////////////////////////////////////Codigo///////////////////////////////////////////////////////



alguna idea de como lo reparo el bug ??


Captura de como es que queda con 1 categoría y con 2 categorías

Screenshot_16.webp

ayuda porfavor
 
Última edición:
El problema está entre la silla y el ordenador.

Con "get_the_term_list" obtienes una lista y si pones varios, lógicamente dicha lista no será solo "subtitulada", "español" o "latino".

Te recomiendo mejor usar: https://codex.wordpress.org/Function_Reference/has_term

kj
 
Nada. ----------
 
Última edición:
l oque quiro saber es como hacer para que muestre los tres resultado si son tres categorias porque si pongo tres no me muestra nada si pongo 1 so lo muestra ????

El problema está entre la silla y el ordenador.

Con "get_the_term_list" obtienes una lista y si pones varios, lógicamente dicha lista no será solo "subtitulada", "español" o "latino".

Te recomiendo mejor usar: https://codex.wordpress.org/Function_Reference/has_term

kj
 
l oque quiro saber es como hacer para que muestre los tres resultado si son tres categorias porque si pongo tres no me muestra nada si pongo 1 so lo muestra ????

La respuesta ya te la di, revisa primero la url que te coloqué.

kj
 
Usa switch mejor :encouragement:
 
Hola.
Como te decian arriba, si deberia ser mejor utilizar la funcion has_term

Pero puedes intentar hacerlo de esta forma: (el codigo no esta probado) https://codex.wordpress.org/Function_Reference/get_the_category
Insertar CODE, HTML o PHP:
<?php

$mostrar = '';
$categories = get_the_category($post->ID);
if($categories){
	foreach($categories as $category) {

		if($category->cat_name == 'Subtitulada'){
			$mostrar .= 'tu html if es subtitulada';
		}

		if($category->cat_name == 'Español'){
			$mostrar .= 'tu html if es Español';
		}
		
	}
}

echo $mostrar;
?>


El codigo html se ira guardando en la variable $mostrar, al final solo la imprimes donde la necesites y te mostrara todo.

Saludos.
 
Hola.
Como te decian arriba, si deberia ser mejor utilizar la funcion has_term

Pero puedes intentar hacerlo de esta forma: (el codigo no esta probado) https://codex.wordpress.org/Function_Reference/get_the_category
Insertar CODE, HTML o PHP:
<?php

$mostrar = '';
$categories = get_the_category($post->ID);
if($categories){
	foreach($categories as $category) {

		if($category->cat_name == 'Subtitulada'){
			$mostrar .= 'tu html if es subtitulada';
		}

		if($category->cat_name == 'Español'){
			$mostrar .= 'tu html if es Español';
		}
		
	}
}

echo $mostrar;
?>


El codigo html se ira guardando en la variable $mostrar, al final solo la imprimes donde la necesites y te mostrara todo.

Saludos.

Si te fijas en el código, parece que está utilizando una taxonomía personalizada, no categorías.

kj
 
Venía a decir lo mismo que [MENTION=81006]kanikase[/MENTION] un switch es lo más cómodo para estos casos.
 
también te recomiendo usar strtolower donde obtienes las categorías o etiquetas para que no tengas problemas por mayúsculas o minúsculas.
 
No te funciona, porque cuando tiene más de uno la cadena es como: "Subtitulada, Latino". Entonces no coincide con ninguno. Aparte que si quieres que te imprima más de uno, los if's deben de estar separados (y en ese caso un switch no sirve), pero asi como está ni if's independientes ni switch te va a servir.

Intenta esto:
PHP:
<?php $idioma = wp_get_object_terms( $post->ID, 'idioma', array( 'fields' => 'names' ) ) ?>

<div class="film-stats">
	<ul>

	<?php if ( in_array('Subtitulada', $idioma) ): ?>
		<li class="Subtitulada"><div class="iSubtitulada"></div></li>
	<?php endif ?>

	<?php if ( in_array('Español', $idioma) ): ?>
		<li class="Castellano"><div class="iCastellano"></div></li>
	<?php endif ?>

	<?php if ( in_array('Latino', $idioma) ): ?>
		<li class="Latino"><div class="iLatino"></div></li>
	<?php endif ?>
	
		<li class=""><div class="i"></div></li>
	</ul>
</div>

Puede que no te funcione por los nombres, si eso pasa usa el strtolower que ya te comentaron y comparalos con las palabras en minusculas ("subtitulada", "español", "latino").

------------------------------------------------------------------------------------------------------------------------------------------------------------------
O también, para como lo tienes, en vez de:
PHP:
<?php $idioma = wp_get_object_terms( $post->ID, 'idioma', array( 'fields' => 'names' ) ) ?>

podría ser algo como:
PHP:
<?php
	$idioma = get_the_term_list($post->ID, 'idioma', '', ',', '');
	$idioma = strip_tags( $idioma );
	$idioma = explode(',', $idioma);
?>

quedando algo como:
PHP:
<?php
	$idioma = get_the_term_list($post->ID, 'idioma', '', ', ', '');
	$idioma = strip_tags( $idioma );
	$idioma = explode(',', $idioma);
?>

<div class="film-stats">
	<ul>

	<?php if ( in_array('Subtitulada', $idioma) ): ?>
		<li class="Subtitulada"><div class="iSubtitulada"></div></li>
	<?php endif ?>

	<?php if ( in_array('Español', $idioma) ): ?>
		<li class="Castellano"><div class="iCastellano"></div></li>
	<?php endif ?>

	<?php if ( in_array('Latino', $idioma) ): ?>
		<li class="Latino"><div class="iLatino"></div></li>
	<?php endif ?>
	
		<li class=""><div class="i"></div></li>
	</ul>
</div>

Saludos.
 
Última edición:
No te funciona, porque cuando tiene más de uno la cadena es como: "Subtitulada, Latino". Entonces no coincide con ninguno. Aparte que si quieres que te imprima más de uno, los if's deben de estar separados (y en ese caso un switch no sirve), pero asi como está ni if's independientes ni switch te va a servir.

Intenta esto:
PHP:
<?php $idioma = wp_get_object_terms( $post->ID, 'idioma', array( 'fields' => 'names' ) ) ?>

<div class="film-stats">
    <ul>

    <?php if ( in_array('Subtitulada', $idioma) ): ?>
        <li class="Subtitulada"><div class="iSubtitulada"></div></li>
    <?php endif ?>

    <?php if ( in_array('Español', $idioma) ): ?>
        <li class="Castellano"><div class="iCastellano"></div></li>
    <?php endif ?>

    <?php if ( in_array('Latino', $idioma) ): ?>
        <li class="Latino"><div class="iLatino"></div></li>
    <?php endif ?>
    
        <li class=""><div class="i"></div></li>
    </ul>
</div>

Puede que no te funcione por los nombres, si eso pasa usa el strtolower que ya te comentaron y comparalos con las palabras en minusculas ("subtitulada", "español", "latino").

------------------------------------------------------------------------------------------------------------------------------------------------------------------
O también, para como lo tienes, en vez de:
PHP:
<?php $idioma = wp_get_object_terms( $post->ID, 'idioma', array( 'fields' => 'names' ) ) ?>

podría ser algo como:
PHP:
<?php
    $idioma = get_the_term_list($post->ID, 'idioma', '', ',', '');
    $idioma = strip_tags( $idioma );
    $idioma = explode(',', $idioma);
?>

quedando algo como:
PHP:
<?php
    $idioma = get_the_term_list($post->ID, 'idioma', '', ', ', '');
    $idioma = strip_tags( $idioma );
    $idioma = explode(',', $idioma);
?>

<div class="film-stats">
    <ul>

    <?php if ( in_array('Subtitulada', $idioma) ): ?>
        <li class="Subtitulada"><div class="iSubtitulada"></div></li>
    <?php endif ?>

    <?php if ( in_array('Español', $idioma) ): ?>
        <li class="Castellano"><div class="iCastellano"></div></li>
    <?php endif ?>

    <?php if ( in_array('Latino', $idioma) ): ?>
        <li class="Latino"><div class="iLatino"></div></li>
    <?php endif ?>
    
        <li class=""><div class="i"></div></li>
    </ul>
</div>

Saludos.

gracias bro el primero me funciono
 
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

Atrás
Arriba