martes, 28 de agosto de 2012

ElBaúlDelProgramador - Personalizar el Error 404 en wordpress

ElBaúlDelProgramador - Personalizar el Error 404 en wordpress

Link to El Baúl del Programador

Personalizar el Error 404 en wordpress

Posted: 27 Aug 2012 12:45 AM PDT

Los errores 404 deben tratarse adecuadamente en las webs para no asustar al usuario y provocar que salga de nuestro sitio.

Es una buena práctica sugerir enlaces que puedan estar relacionados con lo que estaba buscando, poner un enlace a la página principal o al mapa de la web.

Con todo esto en mente busqué cómo crear errores 404 personalizados y modificarlos a mi gusto. La solución la encontré en la misma página del proyecto wordpress:

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  
<p>You   <?php  #some variables for the script to use  #if you have some reason to change these, do.  but wordpress can handle it  $adminemail = get_option('admin_email'); #the administrator email address, according to wordpress  $website = get_bloginfo('url'); #gets your blog's url from wordpress  $websitename = get_bloginfo('name'); #sets the blog's name, according to wordpress      if (!isset($_SERVER['HTTP_REFERER'])) {      #politely blames the user for all the problems they caused          echo "tried going to "; #starts assembling an output paragraph  	$casemessage = "All is not lost!";    } elseif (isset($_SERVER['HTTP_REFERER'])) {      #this will help the user find what they want, and email me of a bad link  	echo "clicked a link to"; #now the message says You clicked a link to...          #setup a message to be sent to me  	$failuremess = "A user tried to go to $website"          .$_SERVER['REQUEST_URI']." and received a 404 (page not found) error. ";  	$failuremess .= "It wasn't their fault, so try fixing it.            They came from ".$_SERVER['HTTP_REFERER'];  	mail($adminemail, "Bad Link To ".$_SERVER['REQUEST_URI'],          $failuremess, "From: $websitename <noreply@$website>"); #email you about problem  	$casemessage = "An administrator has been emailed           about this problem, too.";#set a friendly message    }    echo " ".$website.$_SERVER['REQUEST_URI']; ?>   and it doesn't exist. <?php echo $casemessage; ?>  You can click back   and try again or search for what you're looking for:    <?php include(TEMPLATEPATH . "/searchform.php"); ?>  </p>

Esta porción de código hay que pegarla en el archivo 404.php de la plantilla en uso. Con este código informamos al lector que la página no existe y se proporciona un formulario de búsqueda, además se envía un correo al administrador del blog informándo de este error 404. Aún podemos tratar el error de una manera más amigable y ofrecer más opciones. Por ejemplo las últimas publicaciones del blog:

1  2  3  4  5  6  7  8  9  
<h4>Publicaciones recientes</h4>     <ul>        <?php           $recent_posts = wp_get_recent_posts( array('post_status' => 'publish') );           foreach( $recent_posts as $recent ){  	    echo '<li><a href="' . get_permalink($recent["ID"]) . '" title="Look '.esc_attr($recent["post_title"]).'" >' .   $recent["post_title"].'</a> </li> ';           }        ?>     </ul>

Incluso es posible sugerir entradas relacionadas en base a la url que devolvió el 404:

1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  
<?php   $query_args = array( 's' => basename($_SERVER['REQUEST_URI']) );  $query = new WP_Query( $query_args );     if($query->have_posts()){     echo "<h4>Quizá buscaba...</h4>";        // The Loop     echo '<ul>';     while ( $query->have_posts() ) : $query->the_post();        echo '<li>';  ?>        <a href="<?php the_permalink() ?>" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>  <?php        echo '</li>';     endwhile;     echo '</ul>';        // Reset Post Data     wp_reset_postdata();  }  ?>

Al juntarlo todo, la estructura del código queda así:

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  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  
<p>Ha   <?php     #some variables for the script to use     #if you have some reason to change these, do.  but wordpress can handle it     $adminemail = get_option('admin_email'); #the administrator email address, according to wordpress     $website = get_bloginfo('url'); #gets your blog's url from wordpress     $websitename = get_bloginfo('name'); #sets the blog's name, according to wordpress       if (!isset($_SERVER['HTTP_REFERER'])) {        #politely blames the user for all the problems they caused        echo "intentado ir a "; #starts assembling an output paragraph        $casemessage = "¡No está todo perdido!";     } elseif (isset($_SERVER['HTTP_REFERER'])) {        #this will help the user find what they want, and email me of a bad link        echo "pinchado en un enlace a"; #now the message says You clicked a link to...        #setup a message to be sent to me        $failuremess = "A user tried to go to $website"        .$_SERVER['REQUEST_URI']." and received a 404 (page not found) error. ";        $failuremess .= "It wasn't their fault, so try fixing it.          They came from ".$_SERVER['HTTP_REFERER'];        mail($adminemail, "Bad Link To ".$_SERVER['REQUEST_URI'],        $failuremess, "From: $websitename <noreply@$website>"); #email you about problem        $casemessage = "El administrador ha sido informado sobre este error.";#set a friendly message     }     echo " ".$website.$_SERVER['REQUEST_URI']; ?>      y no existe. <?php echo $casemessage; ?>  Puede volver atrás      e intentarlo de nuevo o buscar lo que desee en el formulario:     <?php include(TEMPLATEPATH . "/searchform.php"); ?>  </p>  <?php      $query_args = array( 's' => basename($_SERVER['REQUEST_URI']) );     $query = new WP_Query( $query_args );        if($query->have_posts()){        echo "<h4>Quizá buscaba...</h4>";           // The Loop        echo '<ul>';        while ( $query->have_posts() ) : $query->the_post();           echo '<li>';  ?>           <a href="<?php the_permalink() ?>" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>           <?php  	 echo '</li>';        endwhile;        echo '</ul>';        // Reset Post Data        wp_reset_postdata();  }  ?>  <br />  <h4>Publicaciones recientes</h4>  <ul>  <?php     $recent_posts = wp_get_recent_posts( array('post_status' => 'publish') );     foreach( $recent_posts as $recent ){        echo '<li><a href="' . get_permalink($recent["ID"]) . '" title="Look '.esc_attr($recent["post_title"]).'" >' .   $recent["post_title"].'</a> </li> ';     }  ?>  </ul>

Para ver un ejemplo haz click en el siguiente enlace: elbauldelprogramador.com/404.


Fuente | Creating an Error 404 Page

Follow Me:
TwitterFacebookLinkedInGoogle PlusStumbleUponYouTube

Related posts:

  1. Nueva página para informar de error 404 en el blog Ahora que blogger permite que creemos nuestra propia página para...
  2. Mostrar el número de seguidores en Twitter en WordPress Hoy voy a explicar cómo mostrar los seguidores de nuestra...
  3. Cómo crear shortcodes en WordPress Es bastante simple: Buscamos el archivo function.php de nuestro tema...


No hay comentarios:

Publicar un comentario

Sigue todas las entradas por email