Si tienes un “prestashop antiguo” (de versión 1.4.x) en el que dejado de funcionar de repente el buscador (muestra siempre: “No se han encontrado resultados para su búsqueda…“) es posible que tu servidor hayan actualizado la versión de PHP a 5.3.29 o superior.

La solución pasa por “actualizar” prestashop a 1.5 o superior, o realizar el siguiente “parche” en el archivo /classes/Search.php:

Busca el código:

foreach ($words AS $key => $word)
	if (!empty($word) AND strlen($word) >= (int)Configuration::get('PS_SEARCH_MINWORDLEN'))
	{
		$word = str_replace('%', '\\%', $word);
		$word = str_replace('_', '\\_', $word);
		$intersectArray[] = 'SELECT id_product
			FROM '._DB_PREFIX_.'search_word sw
			LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word
			WHERE sw.id_lang = '.(int)$id_lang.'
			AND sw.word LIKE 
			'.($word[0] == '-'
				? ' \''.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).'%\''
				: '\''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\''
			);
		if ($word[0] != '-')
			$scoreArray[] = 'sw.word LIKE \''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'';
	}
	else
		unset($words[$key]);

Y reemplázalo por este otro:

$intersectArray[] = 'SELECT distinct p.id_product FROM ps_product p LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product AND pl.id_lang = '.(int)$id_lang.') WHERE pl.name LIKE \'%'.pSQL($expr).'%\'';

(*) Y comprueba que tengas productos indexados para su búsqueda: Entra en el administrador en: Preferencias > Búsqueda. Hay tendría que salir el número de productos indexados para las búsquedas, por ejemplo: Productos indexados: 527 / 527. En caso de no tener ninguno indexado tienes que pinchar en el enlace de “Añadir los productos que faltan al índice ” o “Re-construir el índice completo”.

Agradezco tu comentario 🤘