PHP - If dentro de if en un foreach

   
Vista:

If dentro de if en un foreach

Publicado por Herold (7 intervenciones) el 07/06/2016 12:05:00
Hola a todos,

Tengo una duda que me está dando dolor de cabeza. Estoy editando un Wordpress en un servidor compartido.
Estoy haciendo una recogida de productos en Woocommerce para mostrarlos en una página personalizada.

El problema es que a la hora de recoger los productos dentro de un array, tengo que separarlo por categorias, por lo que me es necesario meter un if dentro del bucle; y dentro de ese if, necesito valorar si tiene una imagen destacada o no, por lo que necesito meter otro if dentro de ese if.

La web me ha dado un error 500 y no es por escribir mal alguna función, ya lo he comprobado. Es ese if dentro del if, dentro del foreach; pero claro, tampoco se me ocurre otro metodo.

No sé si es cosa del servidor o directamente que estoy haciendo mal metiendo esas condiciones de esa manera.

Debajo os dejo una copia del código hasta ahora.

A ver si podeis echarme una mano, gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function recogerExtras() {
 
	$html = ''; $htmlExtra = ''; $htmlExtra2 = ''; $htmlExcursiones = ''; $terminos = '';
	$id_producto = get_the_ID();
 
	$matriz = new WC_Product($id_producto);
	$vinculados = $matriz->get_cross_sells();
 
	$extras = new WP_Query(array('post_type' => 'product', 'post__in' => $vinculados));
 
	foreach($extras->posts as $extra) {
 
		$terminos = get_the_terms($extra->ID, 'product_cat');
		if($terminos[0]->slug == 'seguros') {
			$htmlExtra .= '<div>';
				if($html != '') { $html = ''; } // Aquí va la Imagen Destacada. Condición que da problemas.
			$htmlExtra .= '</div>';
		}
 
	}
 
	$html .= '<div class="vc_col-sm-12">';
		$html .= '<div class="vc_col-sm-4"><h4 style="text-align:center;">Seguros</h4>'.$htmlExtra.'</div>';
		$html .= '<div class="vc_col-sm-4"><h4 style="text-align:center;">+ Seguros</h4>'.$htmlExtra2.'</div>';
		$html .= '<div class="vc_col-sm-4"><h4 style="text-align:center;">Excursiones</h4>'.$htmlExcursiones.'</div>';
	$html .= '</div>';
 
	//return '<pre>'.print_r($extras->posts).'</pre>';
	return $html;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip

If dentro de if en un foreach

Publicado por kip (572 intervenciones) el 07/06/2016 18:39:31
Hola, en la linea del primer if tienes como indice en $terminos el 0, supongo que no quieres evaluar solo aquel indice del array, si no es asi entonces esta correcto dejar solo el 0 ya que solo evaluara el valor cuyo indice sea ese, caso contrario si lo que deseas es evaluar cada indice del array deberias crear una variable que se auto incremente y que funcione como indice, en este caso la variable se autoincrementara mientras la variable $i

1
2
3
4
5
6
7
8
9
10
11
     //inica el foreach 
      foreach($extras->posts as $extra) {
         $terminos = get_the_terms($extra->ID, 'product_cat');
             for ($i=0,$size=count($terminos);$i<$size;$i++){ //bucle for se iniciara por cada elemento del array $terminos 
		   if($terminos[$i]->slug == 'seguros') {
			 $htmlExtra .= '<div>';
				 if($html != '') { $html = ''; } // Aquí va la Imagen Destacada. Condición que da problemas.
			 $htmlExtra .= '</div>';
	            }
            }
      }

Espero aquello resuelva el problema del if, nos comentas como te fue.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

If dentro de if en un foreach

Publicado por Herold (7 intervenciones) el 08/06/2016 10:26:05
El 0 en términos es porque el resultado es solo un objeto sin más, es decir, no me va a dar más resultados en forma de array, es único por lo que no me importa extraerlo directamente sin necesidad del for, aunque gracias, ya he visto cual era el error!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

If dentro de if en un foreach

Publicado por Herold (7 intervenciones) el 08/06/2016 10:33:14
Después de desesperarme mucho, he ido a ver de donde venía el error 500 dentro del registro de Apache. Resulta que no estaba interpretando la llave abierta, por lo que estaba detectando el if como una linea sin terminar o mal escrita.

1
[Tue Jun 07 04:31:12 2016] [error] [client xx.xxx.xxx.xxx] PHP Parse error:  syntax error, unexpected '{' in xxxxxxxxxxxxxxxxxxxxxxxxx ;

Como eso no podía ser, he juntado la llave del if con los parentesis para que quede

1
2
3
if(condicion){}
// En lugar de 
if(condicion) {}

En definitiva, ha sido causa de un error en apache o la codificación del archivo. Aún no entiendo cómo es posible pero ya me ha pasado con varios saltos de linea y espacios, sabiendo el error imagino que ya podré empezar a arreglarlo.

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar