junio 11, 2012

28 trucos, tips y funciones para WordPress

WordPress, como gran herramienta para bloggers, se actualiza a menudo y así mismo aparecen nuevas funciones, nuevos trucos o tips que extienden un poco más las vastas funcionalidades de este poderoso CMS.

1. Mover la barra de administración hacia abajo

La barra de administración es una nueva característica añadida desde WordPress 3.1. Esta barra por aparece por defecto en la parte superior del navegador y muestra enlaces para entrar rápidamente a editar un artículo, crear uno nuevo, ingresar al panel de administración, etc.
Si quieres mostrar esta barra en la parte inferior del navegador, solo debes pegar el siguiente código en el archivo functions.php de tu theme.
01// mover barra de admin al fondo
02function bajar_admin_bar() { ?>
03<style type="text/css">
04body {
05margin-top: -28px;
06padding-bottom: 28px;
07}
08body.admin-bar #wphead {
09padding-top: 0;
10}
11body.admin-bar #footer {
12padding-bottom: 28px;
13}
14#wpadminbar {
15top: auto !important;
16bottom: 0;
17}
18#wpadminbar .quicklinks .menupop ul {
19bottom: 28px;
20}
21</style>
22<?php }
23// en el panel de administración
24add_action( 'admin_head', 'bajar_admin_bar' );
25// en el blog
26add_action( 'wp_head', 'bajar_admin_bar' );

2. Eliminar la barra de administración

Si lo que deseas es no mostrar por ningún motivo la barra de administración, solo debes colocar el siguiente código en el archivo functions.php:
1wp_deregister_script('admin-bar');
2wp_deregister_style('admin-bar');
3remove_action('wp_footer','wp_admin_bar_render',1000);
4remove_action('init', 'wp_admin_bar_init');

3. Desbloquear botones útiles en el editor visual

El editor visual de WordPress tiene casi todos los botones necesarios para editar el contenido de tu artículo, pero hay veces que requieres algunas opciones un poco más detalladas, como estilos, tamaños de la fuente, etc.
Para lograr esto solo debes pegar el siguiente código en el archivo functions.php:
01function habilitar_mas_botones($buttons) {
02$buttons[] = 'hr';
03$buttons[] = 'sub';
04$buttons[] = 'sup';
05$buttons[] = 'fontselect';
06$buttons[] = 'fontsizeselect';
07$buttons[] = 'cleanup';
08$buttons[] = 'styleselect';
09return $buttons;
10}
11add_filter("mce_buttons_3", "habilitar_mas_botones");
Con la anterior función se añade una tercera fila de botones en el editor incluyendo botones para: incluir una línea horizontal, sub-indices, super-indices, seleccionar tipo de fuente, tamaño de fuente, limpiar código y seleccionar estilos. Puedes añadir más estilos si quieres, aquí la lista completa de botones disponibles.

4. Cambiar la fuente del editor

Si deseas cambiar el tipo de fuente con la que se muestra el texto en el editor visual de WordPress, solo debes pegar el siguiente código en el archivo functions.php:
1add_action( 'admin_head-post.php', 'cambiar_fuente_editor' );
2add_action( 'admin_head-post-new.php', 'cambiar_fuente_editor' );
3 
4function cambiar_fuente_editor() { ?>
5<style type="text/css">#editorcontainer #content, #wp_mce_fullscreen { font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif; }</style>
6<?php }
Obviamente puedes cambiar la fuente  ’Georgia’ según sea tu gusto.

5. Permitir más etiquetas HTML en el editor HTML de WordPress

El editor HTML de WordPress no permite etiquetas HTML que no sean de XHTML 1.0. Este código hace que el editor acepte más etiquetas, solo debes pegarlo en el archivo functions.php:
01function cambiar_opciones_mce($initArray) {
02$ext = 'pre[id|name|class|style],iframe[align|longdesc| name|width|height|frameborder|scrolling|marginheight| marginwidth|src]';
03 
04if ( isset( $initArray['extended_valid_elements'] ) ) {
05$initArray['extended_valid_elements'] .= ',' . $ext;
06} else {
07$initArray['extended_valid_elements'] = $ext;
08}
09 
10return $initArray;
11}
12add_filter('tiny_mce_before_init', 'cambiar_opciones_mce');

6. Hacer que tu artículo se vea mejor cuando se comparte en Facebook

Este código sirve para que cuando un usuario comparte tu artículo en Facebook, se vea lo mejor posible, con imagen relacionada o imagen por defecto, enlace hacia web del autor, título, descripción, etc.
Solo debes colocar el siguiente código en el archivo header.php de tu theme antes de la etiqueta <?php wp_head(); ?> :
01<?php
02$thumb = get_post_meta($post->ID,'_thumbnail_id',false);
03$thumb = wp_get_attachment_image_src($thumb[0], false);
04$thumb = $thumb[0];
05?>
06 
07<?php if(is_single() || is_page()) { ?>
08<meta property="og:type" content="article" />
09<meta property="og:title" content="<?php single_post_title(''); ?>" />
10<meta property="og:description" content="<?php
11while(have_posts()):the_post();
12$out_excerpt = str_replace(array("\r\n", "\r", "\n"), "", get_the_excerpt());
13echo apply_filters('the_excerpt_rss', $out_excerpt);
14endwhile; ?>" />
15<meta property="og:url" content="<?php the_permalink(); ?>"/>
16<meta property="og:image" content="<?php if ( $thumb[0] == null ) { echo catch_that_image(); } else { echo $thumb; } ?>" />
17<?php } else { ?>
18<meta property="og:type" content="article" />
19<meta property="og:title" content="<?php bloginfo('name'); ?>" />
20<meta property="og:url" content="<?php bloginfo('url'); ?>"/>
21<meta property="og:description" content="<?php bloginfo('description'); ?>" />
22<meta property="og:image" content="<?php if ( $thumb[0] == null ) { echo catch_that_image(); } else { echo $thumb; } ?>" />
23<?php } ?>
Y luego pegar el siguiente código en el archivo functions.php:
01function catch_that_image() {
02global $post, $posts;
03$first_img = '';
04ob_start();
05ob_end_clean();
06$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
07$first_img = $matches [1] [0];
08 
09if(empty($first_img)){ //Defines a default image
10$first_img = get_bloginfo('stylesheet_directory')."/images/default_icon.jpg";
11}
12return $first_img;
13}
Aquí solo debes cambiar “default_icon.jpg” por la imagen que quieres que salga por defecto.

7. Acortar dirección de ingreso al Panel de Administración

Para hacer que la dirección de ingreso de usuarios al Panel de administración sea mas simple solo debes poner el siguiente código en el archivo .htaccess que se encuentra en la carpeta raíz de tu blog:
1RewriteRule ^login$ http://www.untalchamo.blogspot.com/wp-login.php [NC,L]
Con este código ahora la dirección para entrar al formulario de ingreso será http://www.trazos-web.com/login en vez de http://www.trazos-web.com/wp-login.php. Obviamente debes cambiar “http://www.untalchamo.blogspot.com” por la dirección de tu blog.

8. Deshabilitar cambio de theme

Cuando creas un sitio en WordPress para un cliente, tal vez debas asegurarte que éste no pueda cambiar el theme del blog. Para esto solo debes pegar el siguiente código en el archivo functions.php:
1add_action('admin_init', 'bloquear_theme');
2function bloquear_theme() {
3global $submenu, $userdata;
4get_currentuserinfo();
5if ($userdata->ID != 1) {
6unset($submenu['themes.php'][5]);
7unset($submenu['themes.php'][15]);
8}
9}

9. Deshabilitar trackbacks hacia artículos del mismo blog

Los trackbacks son un sistema de aviso a otros bloggers de que un artículo de ellos ha sido enlazado desde nuestro artículo. El problema con esto viene cuando enlazas un artículo de tu mismo blog, un trackback hacia ti mismo será mostrado en el artículo enlazado.
Para evitar esto, debes poner el siguiente código en el archivo functions.php:
1function disable_self_ping( &$links ) {
2foreach ( $links as $l => $link )
3if ( 0 === strpos( $link, get_option( 'home' ) ) )
4unset($links[$l]);
5}
6add_action( 'pre_ping', 'disable_self_ping' );

10. Mostrar imagen miniatura de cualquier sitio

WordPress.com tiene un servicio llamado mShots, que te permite capturar una imagen en miniatura de cualquier sitio. El siguiente código crea un shortcode para que puedas agregarlo fácilmente a tus artículos. Solo debes pegarlo en el archivo functions.php:
01function wpr_snap($atts, $content = null) {
02extract(shortcode_atts(array(
05"alt" => 'My image',
06"w" => '400', // ancho
07"h" => '300' // alto
08), $atts));
09 
10$img = '<img src="' . $snap . '' . urlencode($url) . '?w=' . $w . '&h=' . $h . '" alt="' . $alt . '"/>';
11return $img;
12}
13 
14add_shortcode("snap", "wpr_snap");
y luego añadir el código del shortcode en la parte del artículo donde quieras que se muestre la imagen:
1[snap url="http://www.untalchamo.blogspot.com" alt="Descripción" w="400" h="300"]
Esto mostrará una captura en miniatura de Trazos Web de tamaño 400×300 pixéles.

11. Eliminar notificación de actualización para no administradores

Este código hace que las notificación de actualización de WordPress solo sean visibles por los administradores del sitio. Copia y pega el siguiente código en el archivo functions.php:
1global $user_login;
2get_currentuserinfo();
3if ($user_login !== "admin") {
4add_action( 'init', create_function( '$a'"remove_action( 'init', 'wp_version_check' );" ), 2 );
5add_filter( 'pre_option_update_core', create_function( '$a'"return null;" ) );
6}

12. Paginación de artículos sin necesidad de un plugin

Este código crea una paginación normal, como lo haría el plugin WP-Pagenavi. Solo debes pegar el siguiente código en el archivo functions.php:
01function pagination($prev = '«', $next = '»') {
02global $wp_query, $wp_rewrite;
03$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;
04$pagination = array(
05'base' => @add_query_arg('paged','%#%'),
06'format' => '',
07'total' => $wp_query->max_num_pages,
08'current' => $current,
09'prev_text' => __($prev),
10'next_text' => __($next), 'type' => 'plain'
11);
12if( $wp_rewrite->using_permalinks() )
13$pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );
14if( !empty($wp_query->query_vars['s']) )
15$pagination['add_args'] = array( 's' => get_query_var( 's' ) ); echo paginate_links( $pagination );
16};
Ahora solo debes añadir la función pagination() al loop de WordPress así:
1<?php if ( have_posts() ) : ?>
2<?php while ( have_posts() ) : the_post(); ?>
3// aquí va el contenido del artículo
4<?php endwhile; ?>
5<div class="pagination"><?php pagination('»', '«'); ?></div>
6<?php endif; ?>
También puedes modificar el estilo de la paginación con las siguiente clases de CSS que nos da WordPress:
1.page-numbers { font-size: 15px; }
2.page-numbers.current { color: #222; }
3.page-numbers .dots { letter-spacing: 1px }
4a.page-numbers { font-size: 14px; color: #3888ff; }

13. Eliminar contenido de wp_head()

Este código te ayuda a eliminar algún código basura, inútil que se inserta automáticamente en nuestra cabecera de WordPress. Solo pega el siguiente código en el archivo functions.php:
1remove_action('wp_head''rsd_link');
2remove_action('wp_head''wp_generator');
3remove_action('wp_head''feed_links', 2);
4remove_action('wp_head''index_rel_link');
5remove_action('wp_head''wlwmanifest_link');
6remove_action('wp_head''feed_links_extra', 3);
7remove_action('wp_head''start_post_rel_link', 10, 0);
8remove_action('wp_head''parent_post_rel_link', 10, 0);
9remove_action('wp_head''adjacent_posts_rel_link', 10, 0);

14. Recortar el tamaño del título

Si solo quieres mostrar algunos caracteres del título del artículo, debes hacer lo siguiente:
Pegar esto en el archivo functions.php:
1function ODD_title($char) {
2$title = get_the_title($post->ID);
3$title = substr($title,0,$char);
4echo $title;
5}
Y luego esto donde quieres que vaya el título recortado. Aquí se muestran solo 20 caracteres. Este código debe ir dentro del Loop de WordPress:
1<?php ODD_title(20); ?>

15. Permitir a los colaboradores subir archivos

Como medida de seguridad WordPress no permite que los colaboradores puedan subir archivos al blog. Pero si aún así deseas que ellos puedan hacerlo, aquí te dejo el código necesario que debes pegar en el archivo functions.php:
1if ( current_user_can('contributor') &amp;amp;amp;&amp;amp;amp; !current_user_can('upload_files') )
2add_action('admin_init''allow_contributor_uploads');
3function allow_contributor_uploads() {
4$contributor = get_role('contributor');
5$contributor->add_cap('upload_files');

16. Categorizar y etiquetar artículos automáticamente

Con este código puedes hacer que al guardar un artículo automáticamente vaya con tal etiqueta o con tal categoría. No olvides modificar “nuevo tag” o “Alguna Categoría” por el nombre de la categoría y/o el nombre de la etiqueta. Estas ya deben haber sido creadas anteriormente. Solo pega esto en el archivo functions.php:
01<?php
02add_action( 'wp_insert_post', 'update_post_terms' );
03function update_post_terms( $post_id ) {
04if ( $parent = wp_is_post_revision( $post_id ) )
05$post_id = $parent;
06$post = get_post( $post_id );
07if ( $post->post_type != 'post' )
08return;
09// add a tag
10wp_set_post_terms( $post_id, 'nuevo tag', 'post_tag', true );
11// add a category
12$categories = wp_get_post_categories( $post_id );
13$newcat = get_term_by( 'name', 'Alguna Categoría', 'category' );
14array_push( $categories, $newcat->term_id );
15wp_set_post_categories( $post_id, $categories );
16}
17?>

17. Utilizar por defecto el acortador de URLs de Google (goo.gl)

Para utilizar este acortador solo debes incluir lo siguiente en el archivo functions.php:
01function googl_shortlink($url, $post_id) {
02global $post;
03if (!$post_id && $post) $post_id = $post->ID;
04 
05if ($post->post_status != 'publish')
06return "";
07 
08$shortlink = get_post_meta($post_id, '_googl_shortlink', true);
09if ($shortlink)
10return $shortlink;
11 
12$permalink = get_permalink($post_id);
13 
14$http = new WP_Http();
15$headers = array('Content-Type' => 'application/json');
16$result = $http->request('https://www.googleapis.com/urlshortener/v1/url', array( 'method' => 'POST', 'body' => '{"longUrl": "' . $permalink . '"}', 'headers' => $headers));
17$result = json_decode($result['body']);
18$shortlink = $result->id;
19 
20if ($shortlink) {
21add_post_meta($post_id, '_googl_shortlink', $shortlink, true);
22return $shortlink;
23}
24else {
25return $url;
26}
27}
28 
29add_filter('get_shortlink', 'googl_shortlink', 9, 2);
Y luego añadir el siguiente código en donde quieras utilizar la URL corta de tu artículo:
1echo "URL corta: " . wp_get_shortlink();

18. Redireccionar la búsqueda si solo hay un resultado

Este código redirecciona al primer artículo resultado de una búsqueda, si solo hay un artículo en la búsqueda. Pega esto en el archivo functions.php:
1add_action('template_redirect', 'single_result');
2function single_result() {
3if (is_search()) {
4global $wp_query;
5if ($wp_query->post_count == 1) {
6wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
7}
8}
9}

19. Editar el enlace de registro de WordPress

Si deseas cambiar el texto del enlace de registro, puede utilizar este código para personalizarlo. Solo debes ponerlo en el archivo functions.php y editar el texto ‘Únete, o lo que quieras’:
1add_filter( 'gettext', 'wpc_register_anchor' );
2add_filter( 'ngettext', 'wpc_register_anchor' );
3function wpc_register_anchor( $translated ) {
4$translated = str_ireplace( 'Register', 'Únete, o lo que quieras', $translated );
5return $translated;
6}

20. Mostrar en el panel de administración el número total de palabras publicadas en el blog

Este código muestra el número total de palabras publicadas en los artículos, justo debajo de las estadísticas de número de artículos, categorías, páginas y etiquetas. Solo pega el siguiente código en el archivo functions.php:
01function post_word_count() {
02$count = 0;
03$posts = get_posts( array(
04'numberposts' => -1,
05'post_type' => array( 'post', 'page' )
06));
07foreach( $posts as $post ) {
08$count += str_word_count( strip_tags( get_post_field( 'post_content', $post->ID )));
09}
10$num = number_format_i18n( $count );
11$text = _n( 'Palabra', 'Palabras', $num );
12echo "<tr><td class='first b'>{$num}</td><td class='t'>{$text}</td></tr>";
13}
14add_action( 'right_now_content_table_end', 'post_word_count');

21. Detectar el navegador del lector

Este código puede ser útil para mostrar un estilo diferente o algo diferente en cada navegador. Solo debes poner el código en el archivo functions.php:
01function wpc_browser_det($classes) {
02global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone;
03if($is_lynx) $classes[] = 'lynx';
04elseif($is_gecko) $classes[] = 'gecko';
05elseif($is_opera) $classes[] = 'opera';
06elseif($is_NS4) $classes[] = 'ns4';
07elseif($is_safari) $classes[] = 'safari';
08elseif($is_chrome) $classes[] = 'chrome';
09elseif($is_IE) {
10$classes[] = 'ie';
11if(preg_match('/MSIE ([0-9]+)([a-zA-Z0-9.]+)/', $_SERVER['HTTP_USER_AGENT'], $browser_version))
12$classes[] = 'ie'.$browser_version[1];
13} else $classes[] = 'unknown';
14if($is_iphone) $classes[] = 'iphone';
15if ( stristr( $_SERVER['HTTP_USER_AGENT'],"mac") ) {
16$classes[] = 'osx';
17} elseif ( stristr( $_SERVER['HTTP_USER_AGENT'],"linux") ) {
18$classes[] = 'linux';
19} elseif ( stristr( $_SERVER['HTTP_USER_AGENT'],"windows") ) {
20$classes[] = 'windows';
21}
22return $classes;
23}
24add_filter('body_class','wpc_browser_det');
Y luego poner lo siguiente en el archivo header.php:
1<body <?php body_class(); ?>>

22. Limitar la búsqueda solo a los títulos de los artículos

Con este código el buscador solo buscará la palabra clave en los título de los artículos. Pégalo en el archivo functions.php:
01function __search_by_title_only( $search, &$wp_query )
02{
03if ( empty($search) )
04return $search;
05$q =&amp;amp;amp; $wp_query->query_vars;
06// wp-includes/query.php line 2128 (version 3.1)
07$n = !empty($q['exact']) ? '' : '%';
08$searchand = '';
09foreach( (array) $q['search_terms'] as $term ) {
10$term = esc_sql( like_escape( $term ) );
11$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
12$searchand = ' AND ';
13}
14$term = esc_sql( like_escape( $q['s'] ) );
15if ( empty($q['sentence']) && count($q['search_terms']) > 1 && $q['search_terms'][0] != $q['s'] )
16$search .= " OR ($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
17if ( !empty($search) ) {
18$search = " AND ({$search}) ";
19if ( !is_user_logged_in() )
20$search .= " AND ($wpdb->posts.post_password = '') ";
21}
22return $search;
23}
24add_filter( 'posts_search', '__search_by_title_only', 10, 2 );

23. Generar automáticamente el meta description de un artículo

Para generar automáticamente el meta description de un artículo solo debes colocar el siguiente código en el archivo functions.php:
01function trw_metadesc() {
02global $post;
03if (!is_single()) { return; }
04$meta = strip_tags($post->post_content);
05$meta = strip_shortcodes($post->post_content);
06$meta = str_replace(array("\n", "\r", "\t"), ' ', $meta);
07$meta = substr($meta, 0, 125);
08echo "<meta name='description' content='$meta' />";
09}
10add_action('wp_head', 'trw_metadesc');

24. Mostrar mensaje personalizado después de registro

Con este código puedes mostrar un mensaje personalizado después del registro de un nuevo usuario. Solo debes pegar lo siguiente en el archivo functions.php:
01add_action('register_form', 'trw_mensaje_registro');
02function trw_mensaje_registro() {
03$html = '
04<div style="margin:10px 0;border:1px solid #e5e5e5;padding:10px">
05<p style="margin:5px 0;">
06AQUÍ VA EL MENSAJE
07</p>
08</div>';
09echo $html;
10}

25. Acortar la dirección de búsqueda

Este pequeño código te ayuda a crear una nueva dirección para las búsquedas. . Solo pega esto en el archivo functions.php:
1function trw_search_url_rule() {
2if ( is_search() && !empty($_GET['s'])) {
3wp_redirect(home_url("/buscar/") . urlencode(get_query_var('s')));
4exit();
5}
6}
7add_action('template_redirect', 'trw_search_url_rule');

26. Obtener el número de visitas de un artículo sin plugin

Con este código puedes mostrar el número de veces que ha sido visto un artículo. Solo debes hacer lo siguiente:
Pegar este código en el archivo functions.php:
01function getPostViews($postID){
02$count_key = 'post_views_count';
03$count = get_post_meta($postID, $count_key, true);
04if($count==''){
05delete_post_meta($postID, $count_key);
06add_post_meta($postID, $count_key, '0');
07return "0 View";
08}
09return $count.' Views';
10}
11function setPostViews($postID) {
12$count_key = 'post_views_count';
13$count = get_post_meta($postID, $count_key, true);
14if($count==''){
15$count = 0;
16delete_post_meta($postID, $count_key);
17add_post_meta($postID, $count_key, '0');
18}else{
19$count++;
20update_post_meta($postID, $count_key, $count);
21}
22}
Luego pegas esto en el archivo single.php, en cualquier parte dentro del Loop de WordPress:
1<?php setPostViews(get_the_ID()); ?>
Y luego pegas el siguiente código en el archivo single.php en donde quieras mostrar el número de visitas del artículo:
1<?php echo getPostViews(get_the_ID()); ?>

27. Mostrar los artículos más visitados

Utilizando el código mostrado en el punto 26 y añadiéndole estas líneas, podemos mostrar una lista de los artículos más visitados. Solo debes poner el siguiente código en donde quieres que se muestre esta lista:
1<?
2query_posts('meta_key=post_views_count&orderby=meta_value_num&order=DESC');
3if (have_posts()) : ?>
4<ul>
5<?php while (have_posts()) : the_post(); ?>
6<li><a href="<?php echo the_permalink(); ?>" title="Enlace Permanente a <?php echo the_title() ?> (<?php echo getPostViews($post->ID); ?> visitas)"><?php echo the_title() ?></a></li>
7<?php endwhile;?>
8</ul>
9<?php endif; ?>

28. Mostrar número de visitas de cada artículo en listado de artículos del Panel de Administración

Con este código, más el código mostrado en el punto 26, podrás agregar una columna al listado de artículos del Panel de Administración donde se muestre el número de veces que ha sido visitado un artículo: Solo debes pegar este código en el archivo functions.php:

01add_filter('manage_posts_columns', 'posts_column_views');
02add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
03function posts_column_views($defaults){
04$defaults['post_views'] = __('Visitas');
05return $defaults;
06}
07function posts_custom_column_views($column_name, $id){
08if($column_name === 'post_views'){
09echo getPostViews(get_the_ID());
10}
11}

0 comentarios:

Publicar un comentario