Cientos de temas preparados para WordPress 3.0

Mira que siempre os digo que no hay nada como aprender uno mismo a hacer las cosas. Además, que es muy fácil añadir las funciones básicas que necesita un tema para estar preparado para las novedades de WordPress 3.0: los menús, fondos personalizados, etc.

Pero vaya, que como sé que siempre nos entra la flojera cuando hay una nueva versión, y si otro lo ha hecho ya ¿para qué perder tiempo uno mismo?, pues he recopilado un buen montón de sitios donde podéis descargar temas ya preparados para todas las funciones nuevas de WordPress 3.0 y, por supuesto, anteriores …

  1. Todos los temas de Templatic están adaptados a WordPress 3.0
  2. Elegant Themes también ha adaptado todos sus maravillosos temas a WordPress 3.0.
  3. Todos los temas gratuitos de Site5.
  4. Algunos de Theme Forest.
  5. Muchos en el repositorio oficial de WordPress.org.
  6. Todos los temas de Obox.
  7. Chunky theme.
  8. Tech 9 theme.
  9. Twist of Ten theme
  10. WP3Theme
  11. Todos los temas de Woothemes
  12. StudioPress
  13. Todos los temas de ThemeShift
  14. Todos los de NattyWP
  15. Todos los temas de WPnow

Hay una enorme cantidad de temas ya adaptados a WordPress 3.0 como puedes comprobar, y si conoces más nos lo cuentas en los comentarios ;)

Cientos de temas preparados para WordPress 3.0

Mira que siempre os digo que no hay nada como aprender uno mismo a hacer las cosas. Además, que es muy fácil añadir las funciones básicas que necesita un tema para estar preparado para las novedades de WordPress 3.0: los menús, fondos personalizados, etc.

Pero vaya, que como sé que siempre nos entra la flojera cuando hay una nueva versión, y si otro lo ha hecho ya ¿para qué perder tiempo uno mismo?, pues he recopilado un buen montón de sitios donde podéis descargar temas ya preparados para todas las funciones nuevas de WordPress 3.0 y, por supuesto, anteriores …

  1. Todos los temas de Templatic están adaptados a WordPress 3.0
  2. Elegant Themes también ha adaptado todos sus maravillosos temas a WordPress 3.0.
  3. Todos los temas gratuitos de Site5.
  4. Algunos de Theme Forest.
  5. Muchos en el repositorio oficial de WordPress.org.
  6. Todos los temas de Obox.
  7. Chunky theme.
  8. Tech 9 theme.
  9. Twist of Ten theme
  10. WP3Theme
  11. Todos los temas de Woothemes
  12. StudioPress
  13. Todos los temas de ThemeShift
  14. Todos los de NattyWP
  15. Todos los temas de WPnow

Hay una enorme cantidad de temas ya adaptados a WordPress 3.0 como puedes comprobar, y si conoces más nos lo cuentas en los comentarios ;)

WPDocs, toda la API WordPress

WPDocs es un sitio impresionantemente bueno y útil, tienes un buscador predictivo que va mostrando resultados mientras escribes, y comprende toda la documentación de funciones y hooks de WordPress. Como puedes adivinar, un recurso genial para desarrolladores y usuarios avanzados.

Guárdalo en favoritos, es genial, en cada función encontrada te muestra ejemplos y un enlace a la documentación completa en el Codex.

¿Te gustó este post? ¡Compártelo! Bitacoras.com TwitThis Facebook Meneame Google Bookmarks del.icio.us Live Technorati Ping.fm Wikio Turn this article into a PDF! E-mail this story to a friend! Print this article!

35 Funciones útiles para functions.php en Wordpress

Normalmente cualquier tema de Wordpress que utilicemos, ya sea externo o creado por nosotros, tiene un archivo functions.php donde se agrupan las funciones que va a utilizar nuestro tema. Su utilidad puede ser de lo más variada, desde cambiar comportamientos por defecto de Wordpress a funciones útiles típicas de cualquier aplicación en PHP.

Seguramente cualquier diseñador que utilice Wordpress con frecuencia tiene una serie de funciones que utiliza en todos sus diseños. Yo suelo utilizar un tema vacío (Starkers) que me permite empezar todo de cero, dándome mayor maniobrabilidad. Pero incluyo ciertas variaciones propias, entre ellas mis propios archivos functions.php y style.css.

Estuve pensando en un principio en incluir en este artículo mi archivo functions.php, en el que incluyo una serie de funciones de uso frecuente. Pero luego decidí ampliar el artículo incluyendo funciones sugeridas por distintos autores, para lograr una cobertura mucho más amplia de funciones útiles. Empezamos.

Cargar jQuery

Mediante esta función nos aseguramos de que se incluye una copia de jQuery. Se obtiene desde los servidores de Google para ahorrarnos algo de ancho de banda y para conseguir en teoría más rapidez para el usuario. Si tenemos alguna función relacionada con jQuery debería ir debajo de esta.

PHP:
  1. if ( !is_admin() ) {
  2.        wp_deregister_script('jquery');
  3.        wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"), false);
  4.        wp_enqueue_script('jquery');
  5.     }

Crear Widgets

Esta función seguro que es de sobra conocida y viene además en la práctica totalidad de temas, incluso en starkers. Se puede adaptar en función del nombre del widget, y de lo que queramos que aparezca antes y después del widget.

PHP:
  1. if (function_exists('register_sidebar')) {
  2.         register_sidebar(array(
  3.             'name' => 'Sidebar Widgets',
  4.             'id'   => 'sidebar-widgets',
  5.             'description'   => 'These are widgets for the sidebar.',
  6.             'before_widget' => '<div id="%1$s" class="widget %2$s">',
  7.             'after_widget'  => '</div>',
  8.             'before_title'  => '<h2>',
  9.             'after_title'   => '</h2>'
  10.         ));
  11.     }

Taxonomías

El uso de esta función lo he explicado en este artículo sobre cómo crear Taxonomías en mi blog.

PHP:
  1. function taxonomias_propias() {
  2.         register_taxonomy('artista', 'post', array(
  3.                     'hierarchical' => false, 'label' => 'Artista',
  4.                     'query_var' => true, 'rewrite' => true));
  5.         register_taxonomy('album', 'post', array(
  6.                     'hierarchical' => false, 'label' => 'Album',
  7.                     'query_var' => true, 'rewrite' => true));
  8.         register_taxonomy('genero', 'post', array(
  9.                     'hierarchical' => false, 'label' => 'Género',
  10.                     'query_var' => true, 'rewrite' => true));
  11.         register_taxonomy('autor', 'post', array(
  12.                     'hierarchical' => false, 'label' => 'Autor',
  13.                     'query_var' => true, 'rewrite' => true));
  14.         register_taxonomy('duracion', 'post', array(
  15.                     'hierarchical' => false, 'label' => 'Duración',
  16.                     'query_var' => true, 'rewrite' => true));
  17.         register_taxonomy('fecha', 'post', array(
  18.                     'hierarchical' => false, 'label' => 'Fecha',
  19.                     'query_var' => true, 'rewrite' => true));
  20.     }
  21.     add_action('init', 'taxonomias_propias', 0);

Crear Taxonomías en páginas

La anterior función creaba taxonomías en las entradas de nuestro blog. Veremos cómo crearlas en las páginas.
Fuente: http://justintadlock.com/archives/2009/11/09/excerpts-and-taxonomies-for-pages-in-wordpress-2-9
Hay que recordar que en Wordpress 2.9 las Taxonomías no admiten jerarquización, como las categorías. Como ejemplo, creamos una Taxonomía para páginas llamada "people":

PHP:
  1. register_taxonomy( 'people', 'page', array( 'hierarchical' => false, 'label' => 'People', 'query_var' => true, 'rewrite' => true ) );
  2.  
  3. add_action( 'admin_menu', 'my_page_taxonomy_meta_boxes' );
  4.  
  5. function my_page_taxonomy_meta_boxes() {
  6.     foreach ( get_object_taxonomies( 'page' ) as $tax_name ) {
  7.         if ( !is_taxonomy_hierarchical( $tax_name ) ) {
  8.             $tax = get_taxonomy( $tax_name );
  9.             add_meta_box( "tagsdiv-{$tax_name}", $tax->label, 'post_tags_meta_box', 'page', 'side', 'core' );
  10.         }
  11.     }
  12. }

Crear Campos Personalizados Globales

Esta función la he descubierto no hace mucho. Fuente: http://digwp.com/2009/09/global-custom-fields-take-two/. Como sabemos, los campos personalizados normales (Custom Fields) en Wordpress están asignados a cada entrada o a cada página. Es decir, que un dato que se repita por toda la web habría que estar incorporándolo en cada entrada, en cada página, etc.. Gracias a la función que veremos a continuación podemos crear Campos Personalizados Globales, disponibles en todas las páginas y entradas. Su ubicación es un poco extraña, ya que una vez creados aparecen en el menú de opciones dentro del administrador.

PHP:
  1. <?php
  2. add_action('admin_menu', 'add_gcf_interface');
  3.  
  4. function add_gcf_interface() {
  5.     add_options_page('Global Custom Fields', 'Global Custom Fields', '8', 'functions', 'editglobalcustomfields');
  6. }
  7.  
  8. function editglobalcustomfields() {
  9.     ?>
  10.     <div class='wrap'>
  11.     <h2>Global Custom Fields</h2>
  12.     <form method="post" action="options.php">
  13.     <?php wp_nonce_field('update-options') ?>
  14.  
  15.     <p><strong>My Name:</strong><br />
  16.     <input type="text" name="myname" size="45" value="<?php echo get_option('myname'); ?>" /></p>
  17.  
  18.     <p><strong>Amazon ID:</strong><br />
  19.     <input type="text" name="amazonid" size="45" value="<?php echo get_option('amazonid'); ?>" /></p>
  20.  
  21.     <p><strong>Today's Featured Website:</strong><br />
  22.     <input type="text" name="todaysite" size="45" value="<?php echo get_option('todaysite'); ?>" /></p>
  23.     <p><strong>Welcome Text:</strong><br />
  24.     <textarea name="welcomemessage" cols="100%" rows="7"><?php echo get_option('welcomemessage'); ?></textarea></p>
  25.     <p><input type="submit" name="Submit" value="Update Options" /></p>
  26.     <input type="hidden" name="action" value="update" />
  27.     <input type="hidden" name="page_options" value="myname,amazonid,todaysite,welcomemessage" />
  28.     </form>
  29.     </div>
  30.     <?php } ?>

Para usarlo simplemente hay que escribir echo get_option('welcomemessage'); o echo get_option('todaysite'); etc (relacionados con el ejemplo de la función)

Campos personalizados (Custom Fields)

Fuente: http://www.mattvarone.com/wordpress/useful-functions-for-wordpress/
Esta función permite simplificar el uso de los Campos Personalizados (Custom Fields) que se pueden incorporar en cada entrada o página. Su uso es:
get_custom_field_value( Custom Field Key, Print ); donde:
1. Custom Field Key: ( cadena ) – Nombre del Campo Personalizado que quieres obtener
2. Print: ( booleano, falso por defecto ) – escribe o devuelve el valor.
Ejemplo:

PHP:
  1. <ul>
  2. // gets the value of the custom field featured_image and prints it.
  3. if ( function_exists( 'get_custom_field_value' ) ) get_custom_field_value( 'featured_image', true );
  4. </ul>
  5. </pre>
  6. Y ahora la función:
  7. <pre lang="php" line="1">
  8. function get_custom_field_value( $szKey, $bPrint = false)
  9. {
  10.     global $post;
  11.     $szValue = get_post_meta( $post->ID, $szKey, true );
  12.     if ( $bPrint == false ) return $szValue; else echo $szValue;
  13. }

Permitir comentarios anidados (threaded comments)

Para activar los comentarios anidados hay que añadir un código dentro del head de tu tema justo antes de wp_head. Este código se puede incorporar a functions.php, lo que ayuda a limpiar un poco la zona del head. Precisa que la función que incorpora jQuery esté ubicada por encima de esta dentro de functions.php
Fuente: http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/

PHP:
  1. function enable_threaded_comments(){
  2.     if (!is_admin()) {
  3.         if (is_singular() AND comments_open() AND (get_option('thread_comments') == 1))
  4.             wp_enqueue_script('comment-reply');
  5.         }
  6. }
  7. add_action('get_header', 'enable_threaded_comments');

Eliminar basura del área head

Según algunos autores, Wordpress ubica gran cantidad de código no muy útil en el head. Cosas como el número de versión, y enlaces WLW, RSD...
Para limpiar todo esto basta con esta función.
Fuente: http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/

PHP:
  1. remove_action('wp_head', 'rsd_link');
  2. remove_action('wp_head', 'wp_generator');
  3. remove_action('wp_head', 'feed_links', 2);
  4. remove_action('wp_head', 'index_rel_link');
  5. remove_action('wp_head', 'wlwmanifest_link');
  6. remove_action('wp_head', 'feed_links_extra', 3);
  7. remove_action('wp_head', 'start_post_rel_link', 10, 0);
  8. remove_action('wp_head', 'parent_post_rel_link', 10, 0);
  9. remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0);

Añadir Google Analytics al footer

Esta función nos permite añadir de una manera sencilla Google Analytics.
Sólo requiere cambiar UA-XXXXX-X por tu código (el que te provee Google Analytics). Esta función utiliza el sistema ga.js, pero se puede cambiar a cualquiera de los otros que ofrece Analytics.
Fuente: http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/

PHP:
  1. function add_google_analytics() {
  2.     echo '<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>';
  3.     echo '<script type="text/javascript">';
  4.     echo 'var pageTracker = _gat._getTracker("UA-XXXXX-X");';
  5.     echo 'pageTracker._trackPageview();';
  6.     echo '</script>';
  7. }
  8. add_action('wp_footer', 'add_google_analytics');

Ajustar el tamaño del extracto

Como sabemos, podemos mostrar el contenido completo de un artículo o su extracto. El extracto tiene un límite de 55 palabras. Esta función te permitirá especificar cualquier longitud (cambia el número 20 a la cifra que quieras).
Fuente: http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/

PHP:
  1. function custom_excerpt_length($length) {
  2.     return 20;
  3. }
  4. add_filter('excerpt_length', 'custom_excerpt_length');

Reducir el tamaño del texto

Función para reducir el número de caracteres de una entrada.
Fuente: http://www.mattvarone.com/wordpress/functionsphp-wordpress-themes/
Ejemplo de uso:
1. Caracteres: ( número int, por defecto 250 ) – Número de caracteres que se muestran.
2. Cola: ( cadena, por defecto "…" ) – Texto a mostrar tras el texto cortado.
3. Mostrar: ( booleano, por defecto: true ) – Imprime la lista o lo devuelve para PHP.

PHP:
  1. // wordpress loop
  2. while (have_posts()) : the_post();
  3.       <h1>the_title(); </h1>
  4.       <div class="entry">
  5. // se cortará el texto al llegar a los 150 caracteres
  6. if ( function_exists( 'shorten_text' ) ) shorten_text( 150 );
  7. </div>
  8. endwhile;

La función que va en functions.php es:

PHP:
  1. function shorten_text( $iChars = 250, $szTail = "...", $bPrint = true )
  2. {
  3. global $post;
  4. $szText = strip_tags( trim( $post->post_content ) );
  5. $szText = substr( $szText, 0, $iChars );
  6. $szText = substr( $szText, 0, strrpos( $szText , ' ' ) ) . $szTail;
  7. apply_filters('the_excerpt', $szText);
  8. if ( $bPrint == true ) echo $szText; else return $szText;
  9. }

Limitar el número de palabras

Ejemplo de uso

PHP:
  1. $longtext= get_the_excerpt(); // Uso con el extracto, aunque se puede hacer con el contenido completo.
  2. $permalink = get_permalink($post->ID);
  3. $shorttext=limit_words($longtext, 13,'&#91;...&#93;&nbsp;&nbsp;<a href="'. $permalink . '" class="mas" title="Ir al art&iacute;culo">M&aacute;s&raquo;</a>' );
  4. echo '<p>' . $shorttext . '</p>';

La función que va en functions.php es:

PHP:
  1. function limit_words( $str, $num, $append_str='' ) {
  2.     $words = preg_split( '/[\s]+/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE );
  3.     if( isset($words[$num][1]) ){
  4.         $str = substr( $str, 0, $words[$num][1] ) . $append_str;
  5.     }
  6.     unset( $words, $num );
  7.     return trim( $str );
  8. }

Cadena de puntos suspensivos personalizadas para el Extracto en Wordpress 2.9+

En los extractos, estos acaban por defecto en "[...]". Esto lo podemos cambiar a lo que queramos con la función que veremos a continuación. Símplemente reemplaza los puntos suspensivos por la cadena de texto que prefieras.
Fuente: http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/.

PHP:
  1. function custom_excerpt_more($more) {
  2.     return '...';
  3. }
  4. add_filter('excerpt_more', 'custom_excerpt_more');

Añadir un favicon a tu blog

Con esta función podrás emplazar de manera muy simple un favicon para tu web. Símplemente sube el icono al directorio raíz (el directorio lo puedes cambiar en la función), escribe la función en functions.php y se añadirá automáticamente la línea necesaria en el head de tu página siempre y cuando tengas wp_head en tu fichero head.php de tu tema.
Fuente: http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/

PHP:
  1. function blog_favicon() {
  2.     echo '<link rel="Shortcut Icon" type="image/x-icon" href="'.get_bloginfo('wpurl').'/favicon.ico" />';
  3. }
  4. add_action('wp_head', 'blog_favicon');

Añadir un favicon a tu área de administración

Igual que el anterior, pero en vez de para la web, esta vez es para tu área de administración. Crea un icono y súbelo al directorio /images/ (puedes cambiar el directorio si quieres)
Fuente: http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/

PHP:
  1. function admin_favicon() {
  2.     echo '<link rel="Shortcut Icon" type="image/x-icon" href="'.get_bloginfo('stylesheet_directory').'/images/favicon.png" />';
  3. }
  4. add_action('admin_head', 'admin_favicon');

Logo personalizado en el login de admin

Fuente: http://www.chrisdecker.com/wordpress/customize-your-wordpress-admin-panel-login-logo/
Puedes cambiar el logo de Wordpress que sale en el login de la página de administración de tu web por otro de tu elección con esta función. Símplemente crea una imagen no mayor de 328 x 84 y súbela al directorio /images/ de tu servidor con el nombre que pongas en la función (en este caso "customlogofilename.png". Si no lo tuvieras créalo. El código a incluir en functions.php es:

PHP:
  1. function my_custom_login_logo() {
  2.     echo '<style type="text/css">
  3.         h1 a { background-image:url(/images/customlogofilename.png) !important; }
  4.     </style>';
  5. }
  6.  
  7. add_action('login_head', 'my_custom_login_logo');

Eliminar el mensaje de actualización de Wordpress

Permite eliminar el a veces molesto mensaje que aparece en el panel de administración que nos pide que actualicemos nuestra versión de Wordpress.
Fuente: http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/

PHP:
  1. if (!current_user_can('edit_users')) {
  2.     add_action('init', create_function('$a', "remove_action('init', 'wp_version_check');"), 2);
  3.     add_filter('pre_option_update_core', create_function('$a', "return null;"));
  4. }

Eliminar el mensaje de error en la pantalla de login de admin

Cuando ponemos mal la contraseña un mensaje nos dice que lo que está mal es la contraseña, lo cual no es muy seguro al dar pistas de cual es el error. Con este código en functions.php eliminamos ese problema.

PHP:
  1. add_filter('login_errors',create_function('$a', "return null;"));

Forzar wp-admin a usar SSL

Util para los que tengan un certificado SSL, ya sea propio o compartido. Es más seguro acceder a el área de administración a través de SSL.

PHP:
  1. define('FORCE_SSL_ADMIN', true);

ID de la Categoría en Body y en la clase de la entrada (post)

Por defecto, WordPress no incluye el ID de la categoría de la entrada actual en body_class ni en post_class. Esta función permite añadirlo.
Fuente: http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/

PHP:
  1. function category_id_class($classes) {
  2.     global $post;
  3.     foreach((get_the_category($post->ID)) as $category)
  4.         $classes [] = 'cat-' . $category->cat_ID . '-id';
  5.         return $classes;
  6. }
  7. add_filter('post_class', 'category_id_class');
  8. add_filter('body_class', 'category_id_class');

Obtener el ID de la primera categoría

Otra función útil cuando tenemos diferentes categorías. Permite obtener el ID de la primera categoría de la entrada actual.
Para usarlo símplemente usa get_first_category_ID(); en el archivo template de tu tema.
Fuente: http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/

PHP:
  1. function get_first_category_ID() {
  2.     $category = get_the_category();
  3.     return $category[0]->cat_ID;
  4. }

Obtener los comentarios más recientes

Con esta función obtenemos los comentarios más recientes.
Para usarlo escribimos dp_recent_comments(6); en el template de nuestro tema, donde el número entre paréntesis es el número de comentarios que queremos que aparezcan.
Fuente: http://www.wplancer.com/how-to-display-recent-comments-without-using-a-plugin-or-widget/

PHP:
  1. function dp_recent_comments($no_comments = 10, $comment_len = 35) {
  2.     global $wpdb;
  3.     $request = "SELECT * FROM $wpdb->comments";
  4.     $request .= " JOIN $wpdb->posts ON ID = comment_post_ID";
  5.     $request .= " WHERE comment_approved = '1' AND post_status = 'publish' AND post_password =''";
  6.     $request .= " ORDER BY comment_date DESC LIMIT $no_comments";
  7.     $comments = $wpdb->get_results($request);
  8.     if ($comments) {
  9.             foreach ($comments as $comment) {
  10.                 ob_start();
  11.         ?>
  12.         <li>
  13.                     <a href="<?php echo get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID; ?>"><?php echo dp_get_author($comment); ?>:</a>
  14.                     <?php echo strip_tags(substr(apply_filters('get_comment_text', $comment->comment_content), 0, $comment_len)); ?>
  15.         </li>
  16.         <?php
  17.         ob_end_flush();
  18.             }
  19.     } else {
  20.             echo '<li>'.__('No comments', 'banago').'';
  21.     }
  22. }
  23. function dp_get_author($comment) {
  24.     $author = "";
  25.     if ( empty($comment->comment_author) )
  26.         $author = __('Anonymous', 'banago');
  27.     else
  28.         $author = $comment->comment_author;
  29.     return $author;
  30. }

Como vemos en:

PHP:
  1. function dp_recent_comments($no_comments = 10, $comment_len = 35)

tenemos por defecto 10 comentarios con una longitud de 35 caracteres, que podemos cambiar.

Crear un código corto (shortcode) para el enlace de portada

Esta función convierte el shortcode [home] a un enlace a tu página de inicio. Para usarlo símplemente escribe [home] en cualquier entrada de tu blog y Wordpress ejecutará la función myHomePage y mostrará el enlace a la home. Puedes probarla para crear otros enlaces. Tienes que cambiar domain.tld por la URL de tu Home, etc..

PHP:
  1. function myHomePage() {
  2. return '<a href="http://domain.tld/"
  3. title="My Website Homepage">My Homepage</a>';
  4. }
  5. add_shortcode('home', 'myHomePage');

Eliminar la versión de Wordpress del header y del feed

PHP:
  1. add_filter('the_generator','killVersion');
  2. function killVersion() { return ''; }
  3. remove_action('wp_head', 'wp_generator');

Limpiar pigbacks y trackbacks de los comentarios

PHP:
  1. function cleanPings($comment, $args, $depth) {
  2. $GLOBALS['comment'] = $comment;
  3. echo '<li>'.comment_author_link().'</li>';
  4. }

Para usarlo, normalmente en comments.php:

PHP:
  1. wp_list_comments('type=pings&callback=cleanPings');

Contar el número de comentarios (sin trackbacks ni pingbacks)

Filtramos la función comments_number de Wordpress para obtener sólo el número de comentarios, ya que normalmente esta función incluye también pingbacks y trackbacks.
Para usarlo símplemente pon comments_number() donde quieras mostrar el número.

PHP:
  1. function countComments($count) {
  2. global $wp_query;
  3. return count($wp_query->comments_by_type['comment']);
  4. }
  5. add_filter('get_comments_number', 'countComments', 0);

Activar miniaturas (thumnails), en Wordpress 2.9+

Podéis ver cómo funciona en este artículo de mi blog: http://www.emenia.es/nuevo-en-wordpress-2-9-miniaturas-de-entrada-post-thumbnails/.

Para usarlo símplemente hay que poner the_post_thumbnail(); dentro del loop.

PHP:
  1. if (function_exists('add_theme_support')) { add_theme_support('post-thumbnails'); }

Obtener y mostrar la primera imagen de una entrada

Con esta función obtenemos la primera imagen que se encuentre dentro del contenido de una entrada.
Fuente: http://www.mattvarone.com/wordpress/useful-functions-for-wordpress/
Los parámetros son:
1. Número de Imagen: Número de la imagen que deseas obtener (por defecto 0, que es por el número que empieza).
2. Mostrar: ( booleano, por defecto false ) – Muestra o devuelve el valor para php.
Uso de la función:

PHP:
  1. <ul>
  2. if ( function_exists( 'get_post_image' ) ) get_post_image( 0, true );
  3. </ul>

Y la función, que irá en functions.php, es:

PHP:
  1. function get_post_image( $iImageNumber = 0, $bPrint = false )
  2. {
  3.     global $post;
  4.     $szPostContent = $post->post_content;
  5.     $szSearchPattern = '~<img [^\>]*\ />~';
  6.     preg_match( $szSearchPattern, $szPostContent, $pics );
  7.     if ( $bPrint == true && !empty($pics) ) echo $pics[$iImageNumber]; else return $pics[$iImageNumber];
  8. }

Obtener los artículos más recientes

Fuente: http://www.mattvarone.com/wordpress/functionsphp-wordpress-themes/
Parámetros:
1. Cantidad: (por defecto 5 ) – Número de entradas para mostrar.
2. Categorías: (por defecto todas las categorías ) – Categorías a incluír o excluir.
3. HTML anterior: ( por defecto li ) – HTML antes del enlace al artículo.
4. HTML después: (por defecto /li ) – HTML después del enlace.
Ejemplo de uso:

PHP:
  1. <ul>
  2. // obtiene las 10 últimas entradas de todas las categorías excepto de la categoría 5
  3. if ( function_exists( 'wp_list_recent_posts' ) ) wp_list_recent_posts( 10, '-5' );
  4. </ul>
  5. </pre>
  6. La función que va en functions.php es:
  7. <pre lang="php" line="1">
  8. function wp_list_recent_posts( $iAmount = 5, $szCat = null, $szBefore = "<li>", $szAfter = "</li>" )
  9. {
  10.     ( $szCat != null ) ? $szCat = "&cat=" . $szCat : $szCat ;
  11.     $aRecentPosts = new WP_Query( "showposts=" . $iAmount . $szCat );
  12.     while($aRecentPosts->have_posts()) : $aRecentPosts->the_post();
  13.     $szReturn .= $szBefore . '<a href="' . get_permalink() . '">' . get_the_title() . '</a>' . $szAfter;
  14.     endwhile;
  15.     echo $szReturn;
  16. }

Obtener los artículos más populares basado en el número de comentarios

Fuente: http://www.gilbertpellegrom.co.uk/top-wordpress-functions-for-your-functions-php-file/
Se puede cambiar el número de artículos cambiando LIMIT al final de $popularposts (en el ejemplo a continuación mostrará los 6 primeros).

PHP:
  1. function get_popular_posts() {
  2.     global $wpdb;
  3.     $now = gmdate("Y-m-d H:i:s",time());
  4.     $lastmonth = gmdate("Y-m-d H:i:s",gmmktime(date("H"), date("i"), date("s"), date("m")-12,date("d"),date("Y")));
  5.     $popularposts = "SELECT ID, post_title, COUNT($wpdb->comments.comment_post_ID) AS 'stammy' FROM $wpdb->posts, $wpdb->comments WHERE comment_approved = '1' AND $wpdb->posts.ID=$wpdb->comments.comment_post_ID AND post_status = 'publish' AND post_date <'$now' AND post_date> '$lastmonth' AND comment_status = 'open' GROUP BY $wpdb->comments.comment_post_ID ORDER BY stammy DESC LIMIT 6";
  6.     $posts = $wpdb->get_results($popularposts);
  7.     $popular = '';
  8.     if($posts){
  9.         foreach($posts as $post){
  10.             $post_title = stripslashes($post->post_title);
  11.             $guid = get_permalink($post->ID);
  12.             $popular .= '<li><a href="'.$guid.'" title="'.$post_title.'">'.$post_title.'</a></li>';
  13.             $i++;
  14.         }
  15.     }
  16.     echo $popular;
  17. }

Mostrar el Copyright

Esta función muestra una información de copyright dinámica, es decir, se irá actualizando cada año.
Fuente: http://www.mattvarone.com/wordpress/useful-functions-for-wordpress/
Parámetros:
1. Año: ( por defecto el año actual ) – Si se da un año previo al actual se mostrará así: 2006 – 2008.
2. Separador: ( por defecto: " – " ) – Texto utilizado para separar los años (en el caso de que se haya declarado un año previo al actual).
3. Cola: ( por defecto ". Todos los derechos reservados." ) – Texto a mostrar tras la información del copyright.

Uso de la función:

PHP:
  1. if ( function_exists( 'display_copyright' ) ) display_copyright();
  2. // Mostrará: <div id="copyright">&amp;copy; 2008. Blog Name. Todos los derechos reservados.</div>
  3. if ( function_exists( 'display_copyright' ) ) display_copyright( 2006, ' a ', '. Some rights reserved.' );
  4. // Mostrará: <div id="copyright">&amp;copy; 2006 a 2008. Blog Name. Some rights reserved.</div>

La función que va en functions.php es:

PHP:
  1. function display_copyright( $iYear = null, $szSeparator = " - ", $szTail = '. Todos los derechos reservados.' )
  2. {
  3.     echo '<div id="copyright">' . display_years( $iYear, $szSeparator, false ) . ' &copy; ' . get_bloginfo('name') . $szTail . '</div>';
  4. }
  5.  
  6. function display_years( $iYear = null, $szSeparator = " - ", $bPrint = true )
  7. {
  8.     $iCurrentYear = ( date( "Y" ) );
  9.     if ( is_int( $iYear ) )
  10.     {
  11.         $iYear = ( $iCurrentYear> $iYear ) ? $iYear = $iYear . $szSeparator . $iCurrentYear : $iYear;
  12.     } else {
  13.         $iYear = $iCurrentYear;
  14.     }
  15.     if ( $bPrint == true ) echo $iYear; else return $iYear;
  16. }

Botón para abrir los PDF en Google Docs

Uso:

PHP:
  1. [pdf href="http://yoursite.com/linktoyour/file.pdf"]View PDF[/pdf]
  2. Fuente: <a href="http://www.wpfunc.com/wordpress/create-pdf-button.html" title="Ir al artículo">http://www.wpfunc.com/wordpress/create-pdf-button.html</a>

Función en functions.php:

PHP:
  1. function pdflink($attr, $content) {
  2.     return '<a class="pdf" href="http://docs.google.com/viewer?url=' . $attr['href'] . '">'.$content.'</a>';
  3. }
  4. add_shortcode('pdf', 'pdflink');

Añade un ID al ul que se encuentra dentro de un menu desplegable

Si hemos creado un menú desplegable del tipo wp_list_pages('exclude=116,122&title_li='); veremos que se crea un menú en el que el ul principal tiene la clase topnav. Si queremos que el ul anidado tenga otra clase (por ejemplo subnav) escribiríamos esta función:

PHP:
  1. function add_menuclass($ulclass) {
  2. return preg_replace('/<ul>/', '<ul class="subnav">', $ulclass, 1);
  3. }
  4. add_filter('wp_list_pages','add_menuclass');

Cambiar el avatar por defecto

Primero creamos un nuevo avatar de 100x100 pixels. Luego lo subimos a /wp-content/themes/tu-tema/images/, grabándolo como gravatar.jpg.

Ahora añadimos este código a nuestro functions.php:

PHP:
  1. if ( !function_exists('fb_addgravatar') ) {
  2.     function fb_addgravatar( $avatar_defaults ) {
  3.     $myavatar = get_bloginfo('template_directory').'/images/gravatar.jpg';
  4.     //avatar por defecto
  5.     $avatar_defaults[$myavatar] = 'Nuevo gravatar';
  6.     return $avatar_defaults;
  7.     }
  8.  add_filter( 'avatar_defaults', 'fb_addgravatar' );
  9. }

Añade los scripts de Contact Form 7 sólo en las páginas seleccionadas

Suelo utilizar Contact Form 7, pero lo malo es que sus scripts se añaden en todas las páginas, esté presente el formulario o no. Con esta función se evita ese problema. Por ejemplo, si sólo lo quiero en la página con ID=33:

PHP:
  1. function add_wpcf7_scripts() {
  2.     if ( is_page('33') )
  3.         wpcf7_enqueue_scripts();
  4. }
  5. if ( ! is_admin() && WPCF7_LOAD_JS )
  6.     remove_action( 'init', 'wpcf7_enqueue_scripts' );
  7. add_action( 'wp', 'add_wpcf7_scripts' );

¿Te gustó este post? ¡Compártelo! Bitacoras.com TwitThis Facebook Meneame Google Bookmarks del.icio.us Live Technorati Ping.fm Wikio Turn this article into a PDF! E-mail this story to a friend! Print this article!

Excluir la última entrada del loop

Una de las funciones más utilizadas en los temas estilo revista, sobre todo de aquellos que disponen de un bloque de entradas destacadas, es la de excluir la última entrada (o varias de las últimas) del loop de la portada de tu sitio.

Y es algo bastante sencillo usando el parámetro 'offset' de la función 'query_posts'. Lo único que tienes que hacer es añadir la siguiente línea al loop de la portada que muestra los últimos posts:

PHP:
  1. query_posts('posts_per_page=5&offset=1');

En este ejemplo lo que hacemos es indicar que muestre los 5 últimos posts pero excluyendo el más reciente, definido en "offset=1".

Un ejemplo del código aplicado al loop sería así:

PHP:
  1. <?php
  2. query_posts('posts_per_page=5&offset=1');
  3. if ( have_posts() ) : while ( have_posts() ) : the_post();
  4. ?>

¿Te gustó este post? ¡Compártelo! Bitacoras.com TwitThis Facebook Meneame Google Bookmarks del.icio.us Live Technorati Ping.fm Wikio Turn this article into a PDF! E-mail this story to a friend! Print this article!

Usando shortcodes en todas partes

hack wordpress

Ya hemos visto muchas maneras de personalizar WordPress con shortcodes pero estas pequeñas maravillas pueden usarse en muchos más sitios que en el editor de entradas, aquí tienes unos cuantos buenos ejemplos … 

Shorcodes en widgets de texto

Lo primero es añadir este código al fichero functions.php de tu tema activo:

PHP:
  1. add_filter( 'widget_text', 'shortcode_unautop');
  2. add_filter( 'widget_text', 'do_shortcode');

La segunda línea es la que hace que funcionen los shortcodes en el widget de texto. Además, hay que tener en cuenta que los widgets de texto tienen una casilla para "añadir saltos de párrafo automáticamente", pues bien, la segunda linea inhabilita el código autop que podría, en caso de estar marcada la casilla, meter el shortcode introducido en un párrafo o incluso romper las tags.

Shortcodes en el tema

También se pueden usar shortcodes en el tema que uses. Para ello utilizamos la función do_shortcode() en la que el argumento será una cadena que contendrá el shortcode.

Por ejemplo, para mostrar el shortcode [publicidad] en tu tema pondrías algo así donde quieras que aparezca el resultado esperado:

PHP:
  1. <?php do_shortcode('[publicidad]'); ?>

La función do_shortcode() acepta cualquier tipo de texto. Si la cadena contiene un shortcode procesará ese código. De este modo, por ejemplo, podrías mostrar manualmente contenido de tus entradas de este modo:

PHP:
  1. <?php
  2. $content = get_the_content();
  3. echo do_shortcode($content);
  4. ?>

Shortcodes en comentarios

De nuevo recurrimos al fichero functions.php para añadirle este código que permite shortcodes en los campos de comentarios:

PHP:
  1. add_filter( 'comment_text', 'shortcode_unautop');
  2. add_filter( 'comment_text', 'do_shortcode' );

Shortcodes en extractos

Ahora, en functions.php añadiremos esto para poder insertar shortcodes en los extractos de entrada:

PHP:
  1. add_filter( 'the_excerpt', 'shortcode_unautop');
  2. add_filter( 'the_excerpt', 'do_shortcode');

Shortcodes en la descripción de usuario

Para poder meter shortcodes en la descripción del usuario hay que pasar la cadena de descripción por la función do_shortcode(). Para ello tendrás que añadir esto a tu tema activo:

PHP:
  1. <?php
  2. // $user_id = 3;
  3. $userdata = get_userdata($user_id);
  4. echo do_shortcode($userdata->description);
  5. ?>

Solo tendrás que cambiar el ID de usuario, en este caso el 3.

Shortcodes en descripciones de etiquetas, categorías y taxonomías

También puedes filtrar estas descripciones. Para ello recurrimos de nuevo al fichero functions.php:

PHP:
  1. add_filter( 'term_description', 'shortcode_unautop');
  2. add_filter( 'term_description', 'do_shortcode' );

Un mundo de posibilidades más ¿no?

¿Te gustó este post? ¡Compártelo! Bitacoras.com TwitThis Facebook Meneame Google Bookmarks del.icio.us Live Technorati Ping.fm Wikio Turn this article into a PDF! E-mail this story to a friend! Print this article!

WP Smart Image II: mejorando la gestión de imágenes

Si no conoces WP Smart Image II estoy seguro de que te estás perdiendo, no solo un gran plugin creado por Darío Ferrer, sino muchas de las posibilidades que WordPress ofrece para la gestión adecuada de imágenes, pues se integra y mejora enormemente la funcionalidad de inserción de imágenes en tu sitio, aprovechando las funciones internas y vitaminando sus posibilidades.

Ya la primera versión del plugin era una maravilla, pero cuando Darío revisó su trabajo previo decidió remozar completamente el plugin y crear WP Smart Image II, convirtiéndolo en su razón de ser: un recurso imprescindible para el diseñador web, pero no solo para el diseñador sino para cualquiera que habitualmente utilice imágenes en su sitio creado con WordPress.

Es importante que sepas que WP Smart Imagen II viene a ser una sustitución de la función 'post_thumbnail', pero no solo la sustituye sino que la mejora. En esta entrada tienes la lista completa de funcionalidades frente a la función nativa de WordPress.

Tan comprometido está Darío con el proyecto que hasta ha creado un Wiki en el que documentar - incluso más allá de lo razonable - el uso y motivos de WP Smart Image II, otro motivo por el que merece la pena apoyar este proyecto, de un desarrollador hispano, de un amigo, de un compañero de comunidad que ayuda a que WordPress sea cada día mejor ¿no os parece?.

Y puede que te preguntes ¿como ayudar a este proyecto?, pues el mejor modo es usar el plugin en tus sitios, probarlo, informar a Darío de cualquier fallo que encuentres o mejora que se te ocurra, también puedes ayudar en el desarrollo, descargando las últimas versiones en su propio Trac.

Si aún no estás convencido de lo que aporta WP Smart Imagen II, aquí tienes sus virtudes …

Diseño y maquetación

  • Agregar atributos "width" y "height" mediante métodos CSS o HTML.
  • Personalizar los atributos "alt" y "title" de las imágenes en caso de que éstas no los tengan.
  • Elegir entre todos los tipos de tamaños predeterminados disponibles de Wordpress: Miniatura, Medio, Grande y Full. Adicionalmente puedes crear nuevos tamaños predeterminados con el plugin Max Image Size Control y manipularlos Fácilmente con WP Smart Image II.
  • Configurar y mostrar imágenes predeterminadas si la entrada no tiene una. También puedes optar por no usar imágenes predeterminadas.
  • Enlazar la imagen al artículo o versión full de la imagen (desde cualquier tamaño), o bien dejarla sin enlace.
  • Agregar un enlace hacia la versión Full de la imagen desde el tamaño Miniatura o cualquier tamaño.
  • Mostrar imágenes aleatorias por cada entrada (en lugar de sólo una).
  • Adaptar el tipo de etiqueta al DTD de tu sitio para una correcta validación W3C.

Desarrollo web

  • Elegir el tipo de salida de la función: echo o return.
  • Añadir clases e ID personalizados a las imágenes, a fin de procesarlas apropiadamente mediante CSS, javascript, PHP y otros recursos..
  • Obtener la URL de la imagen en lugar de la etiqueta completa.
  • Añadir y definir atributos a los enlaces, tales como "rel", "class", "id" y "target".
  • Separar los datos de las imágenes en piezas y mostrarlos individualmente (Alto, ancho, tipo de archivo, ID, etc).
  • Puedes poner a funcionar el plugin en el Modo PHP, ahorrándote así unos cuantos queries para tareas comunes del sistema.

Blogging

  • Elegir la imagen a mostrar a través de una amigable caja en tu editor de texto.
  • Mostrar miniaturas en feeds RSS.
  • Personalizar tamaños en feeds RSS.
  • Asignar títulos a las imágenes directamente de la caja de tu editor.
  • Elegir cualquier imagen de tu librería multimedia y asignarla al artículo, aún si dicha imagen no está vinculada a éste.

¿Aún te quedan dudas para darle una oportunidad al que puede ser el futuro en la gestión de imágenes en WordPress?. Luego no digas que no te he avisado.

Contenido exclusivo para suscriptores al Feed

¡Gracias por seguirnos a diario!. Premiamos tu fidelidad ofreciéndote habitualmente contenidos exclusivos. Hoy puedes descargar:

Clic aquí para iniciar la descarga Guía Domina tu Blog

¿Te gustó este post? ¡Compártelo! Bitacoras.com TwitThis Facebook Meneame Google Bookmarks del.icio.us Live Technorati Ping.fm Wikio Turn this article into a PDF! E-mail this story to a friend! Print this article!

Cosas que necesitas saber de WordPress 2.9

Interesante artículo sobre al menos 10 cosas que necesitas saber sobre el nuevo WordPress 2.9.

Entre las mejoras de esta nueva versión del popular gestor de contenidos que pronto estará disponible de forma oficial podemos comentar algunas funciones nuevas para plantillas como the_post_image() y el soporte de registro, otras novedades para usuario como la disponibilidad de papelera, edición de imágenes y el plugin oEmbed, mejoras en los comentarios y un API metadatos para plugins. Además de una utilidad incluida para la reparación de la base de datos y la vuelta al soporte de PHP4.

Más información en TechnoSailor

Original Post / Entrada Original: Carrero.es. Si quieres Juegos Gratis disfruta aquí o decora tu casa.

Cosas que necesitas saber de WordPress 2.9

Guía de WordPress para principiantes

principiantes wordpress

Si buscas una guía para principiantes en WordPress y te defiendes con el inglés puede que la que ha preparado WPShout te interese. Cubre los siguientes aspectos:

  1. Los fundamentos de cualquier theme WordPress
  2. Los archivos index.php y style.css
  3. La cabecera, barra lateral y pié de página (header, sidebar, footer)
  4. Los archivos de post, comentarios y página (single, comments, page)
  5. Los archivos de portada, funciones y archivo (archives, home, functions)

Haz clic aquí para descargar la guía en PDF.

¿Te gustó este post? ¡Compártelo! Bitacoras.com TwitThis Facebook Meneame Google Bookmarks del.icio.us Live Technorati Ping.fm Wikio Turn this article into a PDF! E-mail this story to a friend! Print this article!

Chuleta de funciones WordPress

Si sueles modificar themes, o eres desarrollador, o simplemente estás aprendiendo WordPress necesitarás una lista de las funciones WordPress y para lo que sirve cada una.

Pues bien, con la WordPress Cheat Sheet tienes todo lo necesario en un PDF para empezar a dominar WordPress. Puedes descargarla haciendo clic en la siguiente imagen …

wordpress cheat sheet

¿Te gustó este post? ¡Compártelo! Bitacoras.com TwitThis Facebook Meneame Google Bookmarks del.icio.us Live Technorati Ping.fm Wikio Turn this article into a PDF! E-mail this story to a friend! Print this article!

Get Adobe Flash playerPlugin by wpburn.com wordpress themes