Hace tiempo leí los 9 consejos de carlosleopoldo.com y estaba pendiente de ganas y tiempo para hacer alguna mejora.
Por fín llegó el día y el mejor sitio para publicar el resultado es este.
He creado una función para colocarla en la página functions.php y poder llamarla desde cualquier sitio.
Lo normal será incluirla en todas las páginas con “Not Found” y similares.
El código para llamar a la función (por ejemplo en el index.php del theme) sería
<?php anti404(); ?>
Esto depende de como se llame la función, que se puede cambiar.
Y la función es:
function anti404(){
global $wpdb;
$no404=explode(',', preg_replace('/[^a-z]/i',',',$_SERVER['REQUEST_URI']));
$donde=array('post_content','post_title','post_excerpt','post_name');
for ($a=0;$a<count($no404);$a++){
if(strlen($no404[$a])>3){
$quebusco.=$no404[$a].', ';
for($b=0;$b<count($donde);$b++){
if($busca==''){$busca= $donde[$b].' LIKE '%'.$no404[$a].'%''; }
else{$busca.= ' OR '.$donde[$b].' LIKE '%'.$no404[$a].'%''; }
}
}
}
$buscaid = $wpdb->get_results(
"SELECT ID FROM $wpdb->posts WHERE ($busca) AND post_type='post'
AND post_status='publish' ORDER BY ID DESC LIMIT 5");
if($buscaid): ?>
<ul><li><b>Mis sugerencias</b> buscando <i><?php echo $quebusco; ?></i><ul>
<?php foreach( $buscaid as $laid ) : $post=get_post($laid->ID); ?>
<li><a href="<?php echo get_permalink($laid->ID); ?>"><?php echo $post->post_title; ?></a></li>
<?php endforeach; ?>
</ul>
</li></ul>
<?php endif;
}
Espero primero que alguien la busque fallos y/o errores, después alguien que la pruebe y sería la leche que encima le gustase a alguno.
zzaludos