Si tienes experiencia en WordPress, sabrás que es muy fácil cambiar el aspecto de tu sitio web gracias a los themes. Hay un montón (pero un montón de verdad) de themes para WordPress disponibles tanto de forma gratuita como pagando. Solo hay que elegir un theme, instalarlo, y obtendrás un aspecto completamente nuevo para tu sitio web en cuestión de minutos.
Lo mejor de WordPress es que, teniendo un poco de conocimientos sobre diseño web y programación en PHP es posible crear un theme. Este tutorial no tratará sobre cómo crear un theme para WordPress, más bien irá destinado a aquellos valientes que lo han intentado, o lo están intentando y quiere agregar una funcionalidad concreta en su theme. Es por eso que en este artículo te mostraremos 9 snippets para personalizar themes en WordPress.
Cambiar la longitud del excerpt
El excerpt hace referencia al fragmento de texto de tu post que es visible en listados y búsquedas a modo de preview. WordPress, en este caso, establece el excerpt a una longitud de 55 palabras por defecto. Pero, WordPress nos permite personalizar la longitud predeterminada a través del filtro excerpt_length, de la siguiente manera.
function my_excerpt_length( $length ) { return 30; } add_filter( 'excerpt_length', 'my_excerpt_length', 999 );
El valor que se devuelve equivale a la suma de las palabras que se mostrarán en el excerpt. Siguiendo el ejemplo del código, mostraremos un excerpt de 30 palabras de longitud.
Reducir las revisiones de los posts
WordPress permite a los redactores y bloggers volver atrás hacia versiones anteriores de sus trabajos. Sin embargo, si las revisiones crecen en número, pueden afectar al rendimiento del sitio web, ya que cada revisión añade una nueva fila en la base de datos. Este problema sólo empeorará con el tiempo.
Para resolver este problema, puedes establecer el número de revisiones que deseas guardar en la base de datos. Para ello, abre tu wp-config.php y añade este snippet. Cambia el número según las revisiones que quieras permitir.
define('WP_POST_REVISIONS', 5);
Si prefiere desactivar las revisiones de WordPress, cambia el valor a FALSE tal que así:
define('WP_POST_REVISIONS', false);
Asignar imagen destacada a un post automáticamente
Es una práctica común para mostrar la imagen destacada que representa o describe un post. WordPress nos obliga a establecer esta imagen, de forma manual. Para hacer el proceso mucho más eficiente, podemos establecer que la imagen destacada sea la primera imagen que hayamos insertado en el post. Si te interesa, puedes utilizar el siguiente snippet.
function autoset_featured() { global $post; $already_has_thumb = has_post_thumbnail($post->ID); if (!$already_has_thumb) { $attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" ); if ($attached_image) { foreach ($attached_image as $attachment_id => $attachment) { set_post_thumbnail($post->ID, $attachment_id); } } } } add_action('the_post', 'autoset_featured'); add_action('save_post', 'autoset_featured'); add_action('draft_to_publish', 'autoset_featured'); add_action('new_to_publish', 'autoset_featured'); add_action('pending_to_publish', 'autoset_featured'); add_action('future_to_publish', 'autoset_featured');
Forzar una longitud mínima en los comentarios
¿Harto de los comentarios de 1 o 2 palabras como "¡Buen artículo!", "Gracias"? Si quieres que los usuarios de tu blog hablen largo y tendido en la zona de comentarios, puedes establecer una longitud mínima en las palabras de los comentarios de los usuarios.
A continuación puedes ver el snippet necesario para establecer un mínimo de caracteres o palabras para los comentarios. Ponlo en el functions.php.
function minimal_comment_length( $commentdata ) { $minimalCommentLength = 20; if ( strlen( trim( $commentdata['comment_content'] ) ) < $minimalCommentLength ){ wp_die( 'All comments must be at least ' . $minimalCommentLength . ' characters long.' ); } return $commentdata; } add_filter( 'preprocess_comment', 'minimal_comment_length' );
La variable $minimalCommentLength es el número mínimo de caracteres que debe escribir un usuario en un comentario para que se publique.
Deshabilitar los enlaces de los comentarios de los usuarios
La zona de comentarios puede ser un nido de spam si no controlamos que los usuarios puedan insertar enlaces. Por defecto, WordPress lo permite, pero no te preocupes, te traemos un snippet que deshabilitará los enlaces insertados por los usuarios en la zona de comentarios sin que tengas que ir moderándolos de uno en uno.
remove_filter('comment_text', 'make_clickable', 9);
Eliminar la clase y el ID de los menús personalizados
Si te fijas en los menú personalizado de WordPress, encontrarás un montón de clases e IDs para cada elemento del menú. Utiliza el siguiente fragmento de código para eliminar las clases que no deseas y para mantener las clases que necesites.
function my_css_attributes_filter($var) { return is_array($var) ? array_intersect($var, array('current-menu-item')) : ''; } add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1); add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1); add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
En el código anterior, manteniendo la clase current-menu-item.
Excluir a las páginas de la búsqueda
Realizar búsquedas en WordPress arroja resultados tanto de páginas como de posts. Seguramente estés utilizando las páginas de WordPress a modo información para la página, cosa que no es relevante para la búsquedas. Si quieres excluir a las páginas de WordPress de las búsquedas, puedes filtrar los resultados para mostrar solo las que esté en los posts. Añade este snippet en el function.php para llevarlo a cabo.
function SearchFilter($query) { if ($query->is_search) { $query->set('post_type', 'post'); } return $query; } add_filter('pre_get_posts','SearchFilter');
Añadir menús adicionales para roles específicos
Puedes ocultar los menús que se encuentran en el Dashboard, para los no-administradores, con este snippet.
function remove_admin_menus(){ if(is_user_logged_in() && !current_user_can('administrator')){ remove_menu_page( 'index.php' ); //Dashboard remove_menu_page( 'edit.php' ); //Posts remove_menu_page( 'upload.php' ); //Media remove_menu_page( 'edit.php?post_type=page' ); //Pages remove_menu_page( 'edit-comments.php' ); //Comments remove_menu_page( 'themes.php' ); //Appearance remove_menu_page( 'plugins.php' ); //Plugins remove_menu_page( 'users.php' ); //Users remove_menu_page( 'tools.php' ); //Tools remove_menu_page( 'options-general.php' ); //Settings } } add_action('admin_init', 'remove_admin_menus');
Tenga en cuenta que esto sólo elimina los menús en pantalla, pero no filtra el permiso del usuario para acceder a estos menús. No impide que un usuario pueda acceder a estos menús directamente a través de la barra de direcciones del navegador.
Fuente: hongkiat.com