Problemas con WPflexishop de Themeforest

Recibí un S.O.S para solucionar varios problemas que le surgieron a un webmaster al utilizar el tema WPflexishop de Themeforest. La web en cuestión es un wordpress para wp-ecommerce que podéis ver aquí: Jotoworld
El primer problema, general para toda la página, apareció al instalar el plugin qTranslate. Tal como estaba programada la plantilla resultaba incompatible con este plugin. Vamos a ver porqué.
Los títulos de los posts mostraban los campos de los tres idiomas. Por ejemplo, para la página “Ejemplo” el resultado era “EjemploExampleEsempio”….fatal…..
Entonces encontré lo siguiente en single.php línea 15

$title = get_post_field( 'post_title', $post_id ); ?>
            <h1><?php echo $title; ?></h1>

Esta llamada no funciona….no entiendo porqué se han complicado la vida y no han utilizado la llamada estándard de WordPress

$title = get_the_title($post_id ); ?>
            <h1><?php echo $title; ?></h1>

Esta funciona bien!!!
Pero este no fue el único código que tuve que retocar…por todo lado el tema parecía marciano….no sólo para los títulos, sino también para los enlaces…..el qTranslate seguía sin funcionar.
Por ejemplo, en el listado de “Related Products” no funcionaban los enlaces a los varios idiomas….siempre direccionaban al idioma por defecto….Otra vez los programadores de Themeforset se habían complicado la vida. esto es lo que encontré en el archivo /wpflexishop/core/frontend/wpsc.php, línea 216

		$related_query = new WP_Query($args);
		if ($related_query->have_posts()) :
			$output .= '<div class="prima_related_products">';
			$output .= "<h3>" . __( 'Related Products', PRIMA_DOMAIN ) . "</h3>";
			$output .= '<ul class="product-list clearfix">';
			while ($related_query->have_posts()) : $related_query->the_post();
				$id = get_the_ID();
				$output .= '<li class="product-listing" style="width: ' . $width . 'px;">';
				$output .= '<div class="padding">';
				$output .= '<div class="product-meta" style="width:'.$width.'px;height:'.$height.'px" >';
				$output .= '<div class="imagecol" style="margin:0;padding:0;text-align:center;width:'.$width.'px;height:'.$height.'px;line-height:'.$height.'px;">';
				$output .= '<a href="'.get_permalink().'">';

y que modifiqué de la siguiente manera

		$related_query = new WP_Query($args);
		if ($related_query->have_posts()) :
			$output .= '<div class="prima_related_products">';
			$output .= "<h3>" . __( 'Related Products', PRIMA_DOMAIN ) . "</h3>";
			$output .= '<ul class="product-list clearfix">';
			while ($related_query->have_posts()) : $related_query->the_post();
				$id = get_the_ID();
$my_custom_permalink =get_post_permalink($id);
$my_custom_permalink=apply_filters('the_permalink', $my_custom_permalink);
				$output .= '<li class="product-listing" style="width: ' . $width . 'px;">';
				$output .= '<div class="padding">';
				$output .= '<div class="product-meta" style="width:'.$width.'px;height:'.$height.'px" >';
				$output .= '<div class="imagecol" style="margin:0;padding:0;text-align:center;width:'.$width.'px;height:'.$height.'px;line-height:'.$height.'px;">';
				$output .= '<a href="'.$my_custom_permalink.'">';

o también en /wpflexishop/core/frontend/sliders.php, línea 24, que estaba así:

			<?php $custom = get_post_custom($postid);
			$link = isset($custom["link"][0]) ? $custom["link"][0] : false;
			?>
			<?php 
			if ($link ) {
				if ($custom['pretty_photo'][0] == 'yes') 
					echo '<a href="'.$link.'" rel="prettyPhoto" title="'.esc_attr(get_the_title()).'">'; 
				else
					echo '<a href="'.$link.'" title="'.esc_attr(get_the_title()).'" class="featured-blog-image">'; 
			}
			?>

y que dejé así:

			<?php $custom = get_post_custom($postid);
			$link = isset($custom["link"][0]) ? $custom["link"][0] : false;
$link=apply_filters('the_permalink', $link);
			?>
			<?php 
			if ($link ) {
				if ($custom['pretty_photo'][0] == 'yes') 
					echo '<a href="'.$link.'" rel="prettyPhoto" title="'.esc_attr(get_the_title()).'">'; 
				else
					echo '<a href="'.$link.'" title="'.esc_attr(get_the_title()).'" class="featured-blog-image">'; 
			}
			?>

En fin….tuve que retocar bastante más archivo, ahora no recuerdo exactamente cuales fueron en total, pero los cambios eran básicamente estos, arreglar títulos y Permalinks.
Luego se presentó otro problema con el plugin PrettyPhoto. Al subir una galería, la primera foto se repetía y se mostraba dos veces.
Vamos a ver como lo solucioné el asunto.
En el archivo wpsc-single_product.php, línea 68 es donde empiezan los problemas. Éste es el código

				echo '<a rel="prettyPhoto['.wpsc_the_product_id().']" class="preview_link" href="'.$full_img.'" title="'.esc_attr($img_title).'" style="margin:0;padding:0;text-align:center;width:'.($image_width+10).'px;display:block;">';
				echo '<img class="product_image" id="product_image_'.wpsc_the_product_id().'" alt="'.esc_attr(wpsc_the_product_title()).'" src="'.$single_img.'" style="margin:0 auto;width:auto;vertical-align:middle;" />';
				echo '</a>';
			echo '</div>';
			$thumb_width = get_option('wpsc_gallery_image_width') ? get_option('wpsc_gallery_image_width') : 96;
			$thumb_height = get_option('wpsc_gallery_image_height') ? get_option('wpsc_gallery_image_height') : 96;
			if (count($attachments)>1) {
				echo '<div class="single_image_thumb clearfix">';
				if ($main_img_id) {
					$thumb_img = prima_get_image( $main_img_id, $thumb_width, $thumb_height, true );
					$full_img = prima_get_image( $main_img_id, false, false, false );
					$img_title = get_post_meta( $main_img_id, '_wp_attachment_image_alt', true );
					if(!$img_title) $img_title = get_post_field( 'post_title', $main_img_id );
					echo '<a id="image_thumb_'.$main_img_id.'" class="image_thumb_clickable" href="'.$full_img.'" title="'.esc_attr($img_title).'"><img src="'.$thumb_img.'" width="'.$thumb_width.'" height="'.$thumb_height.'" alt="'.esc_attr(wpsc_the_product_title()).'" /></a>'; 
				}
				foreach ( $attachments as $id => $attachment ) {
					if ( $id == $main_img_id )
						continue; 
					$thumb_img = prima_get_image( $id, $thumb_width, $thumb_height, true );
					$full_img = prima_get_image( $id, false, false, false );
					$img_title = get_post_meta( $id, '_wp_attachment_image_alt', true );
					if(!$img_title) $img_title = get_post_field( 'post_title', $id );
					echo '<a id="image_thumb_'.$id.'" class="image_thumb_clickable" href="'.$full_img.'" title="'.esc_attr($img_title).'"><img src="'.$thumb_img.'" width="'.$thumb_width.'" height="'.$thumb_height.'" alt="'.esc_attr(wpsc_the_product_title()).'" /></a>'; 
				}
				echo '</div>';
				echo '<div class="multi_image_box hide">';
				foreach ( $attachments as $id => $attachment ) {
					$multi_img = prima_get_image( $id, $image_width, $image_height, $crop );
					$full_img = prima_get_image( $id, false, false, false );
					$multi_img_title = get_post_meta( $id, '_wp_attachment_image_alt', true );
					if(!$multi_img_title) $multi_img_title = get_post_field( 'post_title', $id );
					echo '<a rel="prettyPhoto['.wpsc_the_product_id().']" id="single_image_thumb_'.$id.'" href="'.$full_img.'" title="'.esc_attr($multi_img_title).'"><img src="'.$multi_img.'" alt="'.esc_attr(wpsc_the_product_title()).'" /></a>'; 
				}
				echo '</div>';
			}

La primera foto viene insertada dos veces en la galería, una vez como foto de galería y otra como main image. Lo que hice fue modificar el código para que quedara de la siguiente manera

//pequeño script necesario para que funcione el invento
<script type="text/javascript">
/* Custom Scripts */
jQuery(document).ready(function($) {
jQuery("#startPrettyPhoto").click(function() {
  jQuery("a[rel^='prettyPhoto']:first").click()
});
});
</script>
// Y ahora quitamos rel="prettyPhoto['.wpsc_the_product_id().']" de la primera línea para que no cargue dos veces la foto y ponemo href="#"  para que no vaya a la página de la vista de la imagen y carge el Prettyshop:
				echo '<a id="startPrettyPhoto" class="preview_link" href="#" title="'.esc_attr(wpsc_the_product_title()).'" style="margin:0;padding:0;text-align:center;width:'.($image_width+10).'px;display:block;">';
				echo '<img class="product_image" id="product_image_'.wpsc_the_product_id().'" alt="'.esc_attr($img_title).'" src="'.$single_img.'" style="margin:0 auto;width:auto;vertical-align:middle;" />';
				echo '</a>';
			echo '</div>';
			$thumb_width = get_option('wpsc_gallery_image_width') ? get_option('wpsc_gallery_image_width') : 96;
			$thumb_height = get_option('wpsc_gallery_image_height') ? get_option('wpsc_gallery_image_height') : 96;
			if (count($attachments)>1) {
				echo '<div class="single_image_thumb clearfix">';
				if ($main_img_id) {
					$thumb_img = prima_get_image( $main_img_id, $thumb_width, $thumb_height, true );
					$full_img = prima_get_image( $main_img_id, false, false, false );
					$img_title = get_post_meta( $main_img_id, '_wp_attachment_image_alt', true );
					if(!$img_title) $img_title = get_post_field( 'post_title', $main_img_id );
					echo '<a id="image_thumb_'.$main_img_id.'" class="image_thumb_clickable" href="'.$full_img.'" title="'.esc_attr(wpsc_the_product_title()).'"><img src="'.$thumb_img.'" width="'.$thumb_width.'" height="'.$thumb_height.'" alt="'.esc_attr($img_title).'" /></a>'; 
				}
				foreach ( $attachments as $id => $attachment ) {
					if ( $id == $main_img_id )
						continue; 
					$thumb_img = prima_get_image( $id, $thumb_width, $thumb_height, true );
					$full_img = prima_get_image( $id, false, false, false );
					$img_title = get_post_meta( $id, '_wp_attachment_image_alt', true );
					if(!$img_title) $img_title = get_post_field( 'post_title', $id );
					echo '<a rel="prettyPhoto['.wpsc_the_product_id().']" class="image_thumb_clickable" href="'.$full_img.'" title="'.esc_attr(wpsc_the_product_title()).'"><img src="'.$thumb_img.'" width="'.$thumb_width.'" height="'.$thumb_height.'" alt="'.esc_attr($img_title).'" /></a>'; 
				}
				echo '</div>';
// Y nos cargamos también todo el código que venía aquí....así se abrirá el Fancybox directamente cada vez que clickamos en un thumbnail.
			}

Los de Themeforest habían dejado esta galería funcionando sólo para una imagen para cada producto, cuando la gracia de PrettyPhoto es justamente poder crear galerías con múltiples imágenes.
Estuve intentando conseguir respuestas a los varios fallos de su tema, pero nada…ni para qtranslate ni para PrettyPhoto….Nunca llegué a preguntar directamente porque vi lo que contestaron a otros: contacta con los desarrolladores de estos plugins. Además era complicado entrar en sus foros (cerrados) y pensé que me las apañaría más rápidamente yo solita. En fin…no compré yo esta plantilla…me encontré con este panorama ya montado…..y ahora se que no compraré nunca una plantilla a los de Themeforest, ya que

Deja un comentario