02abr
60

Alojamiento Wordpress con Soporte

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.

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

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.

    if (function_exists('register_sidebar')) {
        register_sidebar(array(
            'name' => 'Sidebar Widgets',
            'id'   => 'sidebar-widgets',
            'description'   => 'These are widgets for the sidebar.',
            'before_widget' => '<div id="%1$s" class="widget %2$s">',
            'after_widget'  => '</div>',
            'before_title'  => '<h2>',
            'after_title'   => '</h2>'
        ));
    }

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

    function taxonomias_propias() {
        register_taxonomy('artista', 'post', array(
                    'hierarchical' => false, 'label' => 'Artista',
                    'query_var' => true, 'rewrite' => true));
        register_taxonomy('album', 'post', array(
                    'hierarchical' => false, 'label' => 'Album',
                    'query_var' => true, 'rewrite' => true));
        register_taxonomy('genero', 'post', array(
                    'hierarchical' => false, 'label' => 'Género',
                    'query_var' => true, 'rewrite' => true));
        register_taxonomy('autor', 'post', array(
                    'hierarchical' => false, 'label' => 'Autor',
                    'query_var' => true, 'rewrite' => true));
        register_taxonomy('duracion', 'post', array(
                    'hierarchical' => false, 'label' => 'Duración',
                    'query_var' => true, 'rewrite' => true));
        register_taxonomy('fecha', 'post', array(
                    'hierarchical' => false, 'label' => 'Fecha',
                    'query_var' => true, 'rewrite' => true));
    }
    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”:

register_taxonomy( 'people', 'page', array( 'hierarchical' => false, 'label' => 'People', 'query_var' => true, 'rewrite' => true ) );

add_action( 'admin_menu', 'my_page_taxonomy_meta_boxes' );

function my_page_taxonomy_meta_boxes() {
    foreach ( get_object_taxonomies( 'page' ) as $tax_name ) {
        if ( !is_taxonomy_hierarchical( $tax_name ) ) {
            $tax = get_taxonomy( $tax_name );
            add_meta_box( "tagsdiv-{$tax_name}", $tax->label, 'post_tags_meta_box', 'page', 'side', 'core' );
        }
    }
}

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
add_action('admin_menu', 'add_gcf_interface');

function add_gcf_interface() {
    add_options_page('Global Custom Fields', 'Global Custom Fields', '8', 'functions', 'editglobalcustomfields');
}

function editglobalcustomfields() {
    ?>
    <div class='wrap'>
    <h2>Global Custom Fields</h2>
    <form method="post" action="options.php">
    <?php wp_nonce_field('update-options') ?>

    <p><strong>My Name:</strong><br />
    <input type="text" name="myname" size="45" value="<?php echo get_option('myname'); ?>" /></p>

    <p><strong>Amazon ID:</strong><br />
    <input type="text" name="amazonid" size="45" value="<?php echo get_option('amazonid'); ?>" /></p>

    <p><strong>Today's Featured Website:</strong><br />
    <input type="text" name="todaysite" size="45" value="<?php echo get_option('todaysite'); ?>" /></p>

    <p><strong>Welcome Text:</strong><br />
    <textarea name="welcomemessage" cols="100%" rows="7"><?php echo get_option('welcomemessage'); ?></textarea></p>

    <p><input type="submit" name="Submit" value="Update Options" /></p>

    <input type="hidden" name="action" value="update" />
    <input type="hidden" name="page_options" value="myname,amazonid,todaysite,welcomemessage" />

    </form>
    </div>
    <?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:

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

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/

function enable_threaded_comments(){
    if (!is_admin()) {
        if (is_singular() AND comments_open() AND (get_option('thread_comments') == 1))
            wp_enqueue_script('comment-reply');
        }
}
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/

remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
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/

function add_google_analytics() {
    echo '<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>';
    echo '<script type="text/javascript">';
    echo 'var pageTracker = _gat._getTracker("UA-XXXXX-X");';
    echo 'pageTracker._trackPageview();';
    echo '</script>';
}
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/

function custom_excerpt_length($length) {
    return 20;
}
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.

// wordpress loop
while (have_posts()) : the_post();
      <h1>the_title(); </h1>
      <div class="entry">
// se cortará el texto al llegar a los 150 caracteres
if ( function_exists( 'shorten_text' ) ) shorten_text( 150 );
</div>
endwhile;

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

function shorten_text( $iChars = 250, $szTail = "...", $bPrint = true )
{
global $post;
$szText = strip_tags( trim( $post->post_content ) );
$szText = substr( $szText, 0, $iChars );
$szText = substr( $szText, 0, strrpos( $szText , ' ' ) ) . $szTail;
apply_filters('the_excerpt', $szText);
if ( $bPrint == true ) echo $szText; else return $szText;
}

Limitar el número de palabras
Ejemplo de uso

$longtext= get_the_excerpt(); // Uso con el extracto, aunque se puede hacer con el contenido completo.
$permalink = get_permalink($post->ID);
$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>' );
echo '<p>' . $shorttext . '</p>';

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

function limit_words( $str, $num, $append_str='' ) {
    $words = preg_split( '/[\s]+/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE );
    if( isset($words[$num][1]) ){
        $str = substr( $str, 0, $words[$num][1] ) . $append_str;
    }
    unset( $words, $num );
    return trim( $str );
}

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/.

function custom_excerpt_more($more) {
    return '...';
}
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/

function blog_favicon() {
    echo '<link rel="Shortcut Icon" type="image/x-icon" href="'.get_bloginfo('wpurl').'/favicon.ico" />';
}
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/

function admin_favicon() {
    echo '<link rel="Shortcut Icon" type="image/x-icon" href="'.get_bloginfo('stylesheet_directory').'/images/favicon.png" />';
}
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:

function my_custom_login_logo() {
    echo '<style type="text/css">
        h1 a { background-image:url(/images/customlogofilename.png) !important; }
    </style>';
}

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/

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

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.

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.

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/

function category_id_class($classes) {
    global $post;
    foreach((get_the_category($post->ID)) as $category)
        $classes [] = 'cat-' . $category->cat_ID . '-id';
        return $classes;
}
add_filter('post_class', 'category_id_class');
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/

function get_first_category_ID() {
    $category = get_the_category();
    return $category[0]->cat_ID;
}

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/

function dp_recent_comments($no_comments = 10, $comment_len = 35) {
    global $wpdb;
    $request = "SELECT * FROM $wpdb->comments";
    $request .= " JOIN $wpdb->posts ON ID = comment_post_ID";
    $request .= " WHERE comment_approved = '1' AND post_status = 'publish' AND post_password =''";
    $request .= " ORDER BY comment_date DESC LIMIT $no_comments";
    $comments = $wpdb->get_results($request);
    if ($comments) {
            foreach ($comments as $comment) {
                ob_start();
        ?>
        <li>
                    <a href="<?php echo get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID; ?>">< ?php echo dp_get_author($comment); ?>:</a>
                    <?php echo strip_tags(substr(apply_filters('get_comment_text', $comment->comment_content), 0, $comment_len)); ?>
        </li>
        <?php
        ob_end_flush();
            }
    } else {
            echo '<li>'.__('No comments', 'banago').'';
    }
}
function dp_get_author($comment) {
    $author = "";
    if ( empty($comment->comment_author) )
        $author = __('Anonymous', 'banago');
    else
        $author = $comment->comment_author;
    return $author;
}

Como vemos en:

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..

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

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

add_filter('the_generator','killVersion');
function killVersion() { return ''; }
remove_action('wp_head', 'wp_generator');

Limpiar pigbacks y trackbacks de los comentarios

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

Para usarlo, normalmente en comments.php:

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.

function countComments($count) {
global $wp_query;
return count($wp_query->comments_by_type['comment']);
}
add_filter('get_comments_number', 'countComments', 0);

Activar miniaturas (thumbnails), 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.

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:

<ul>
if ( function_exists( 'get_post_image' ) ) get_post_image( 0, true );
</ul>

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

function get_post_image( $iImageNumber = 0, $bPrint = false )
{
    global $post;
    $szPostContent = $post->post_content;
    $szSearchPattern = '~<img [^\>]*\ />~';
    preg_match( $szSearchPattern, $szPostContent, $pics );
    if ( $bPrint == true && !empty($pics) ) echo $pics[$iImageNumber]; else return $pics[$iImageNumber];
}

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:

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

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).

function get_popular_posts() {
    global $wpdb;
    $now = gmdate("Y-m-d H:i:s",time());
    $lastmonth = gmdate("Y-m-d H:i:s",gmmktime(date("H"), date("i"), date("s"), date("m")-12,date("d"),date("Y")));
    $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";
    $posts = $wpdb->get_results($popularposts);
    $popular = '';
    if($posts){
        foreach($posts as $post){
            $post_title = stripslashes($post->post_title);
            $guid = get_permalink($post->ID);
            $popular .= '<li><a href="'.$guid.'" title="'.$post_title.'">'.$post_title.'</a></li>';
            $i++;
        }
    }
    echo $popular;
}

Mostrar el CopyrightEsta 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:

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

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

function display_copyright( $iYear = null, $szSeparator = " - ", $szTail = '. Todos los derechos reservados.' )
{
    echo '<div id="copyright">' . display_years( $iYear, $szSeparator, false ) . ' &copy; ' . get_bloginfo('name') . $szTail . '</div>';
}

function display_years( $iYear = null, $szSeparator = " - ", $bPrint = true )
{
    $iCurrentYear = ( date( "Y" ) );
    if ( is_int( $iYear ) )
    {
        $iYear = ( $iCurrentYear > $iYear ) ? $iYear = $iYear . $szSeparator . $iCurrentYear : $iYear;
    } else {
        $iYear = $iCurrentYear;
    }
    if ( $bPrint == true ) echo $iYear; else return $iYear;
}

Botón para abrir los PDF en Google Docs
Uso:

[pdf href="http://yoursite.com/linktoyour/file.pdf"]View PDF[/pdf]
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:

function pdflink($attr, $content) {
    return '<a class="pdf" href="http://docs.google.com/viewer?url=' . $attr['href'] . '">'.$content.'</a>';
}
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:

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

Cambiar el avatar por defecto
Primero creamos un nuevo avatar de 100×100 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:

if ( !function_exists('fb_addgravatar') ) {
    function fb_addgravatar( $avatar_defaults ) {
    $myavatar = get_bloginfo('template_directory').'/images/gravatar.jpg';
    //avatar por defecto
    $avatar_defaults[$myavatar] = 'Nuevo gravatar';
    return $avatar_defaults;
    }
 add_filter( 'avatar_defaults', 'fb_addgravatar' );
}

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:

function add_wpcf7_scripts() {
    if ( is_page('33') )
        wpcf7_enqueue_scripts();
}
if ( ! is_admin() && WPCF7_LOAD_JS )
    remove_action( 'init', 'wpcf7_enqueue_scripts' );
add_action( 'wp', 'add_wpcf7_scripts' );

Valora este artículo para mejorar la calidad del blog ...

MaloPobreNo está malMe gustaExcelente (4 votos, promedio: 4,75 de 5)
Loading ... Loading ...
d4f6608f2f71862429d169eac83acfc5
Share

Anúnciese aquí »


  • http://appscene.es none

    maravillosooo muchas grasias me encantan los coddigos para functions.php

  • http://www.creosignum.com study

    Excelente post, hiciste una muy buena selección de las funciones basicas que la mayoria de los sitios necesitan, muy completa. Me gusta esto de que se esten tratando mas temas de desarrollo en el blog.

    Solamente dos cositas, primero yo no usaria funciones php para imprimir cosas como javascript ya que se gastan recursos inecesariamente (aunque si usan algun plugin de cacheo da igual) y segundo para la función de obtener la primera imagen de cada post, me parece que es mejor la del usuario Dario (metacortex) Ferrer. ya que permite obtener los distintos tipos de imagen y así alivianar la descarga (es una opinion, no palabra santa).

  • Camilo

    Impresionante. Muchas gracias por esto. Va directo a mis marcadores :)

  • Pingback: Funciones utiles para tu wordpress | Todo Tutoriales web

  • Cyberfrancis

    Miedo me da añadir cosas nuevas en functions.php, más cuando dentro de nada tendremos la versión 3.0. Lo que si me gustaría saber es si estas funciones podrán ser añadidas en la versión 3.0 de WordPress, más que nada, por si hay cambios en functions.php, esperarme antes de tocar nada :)

    Saludos :)

    • Camilo

      Cyberfrancis, por lo que tengo entendido son perfectamente compatibles con la nueva versión. Es más, hay casos donde se especifica que son para versión 2.9 o más nueva (2.9+) por lo que no debería haber problema. :)

  • http://damiandeluca.com.ar Damián

    Muchas gracias por la información, realmente resulta muy útil para todos los que trabajamos con WordPress. Espero que sigan publicando artículos tan completos como este.

    Saludos y gracias.

  • Pingback: Funciones útiles para functions.php en Wordpress | emenia.es

  • Darío Ferrer

    Excelente contribución, mis felicitaciones a Juan. Desde hace poco están proliferando iniciativas que nos invitan a comprender y dominar el sistema de WordPress y -al mismo tiempo- librarnos un poco de la dependencia de plugins de terceros.

  • http://todotegusta.com Lutor

    Me vino al pelo!!!!!!!!

    Gracias..

    tengo una pregunta como hago para que la pagina (creo que es en functions.php) al apretar en un post no carge todo de una, sino que entre mas rapido..

  • http://dragondeluz.com dragondeluz

    a este post le falta un boton de hacer una donacion al autor…..

  • http://wbloo.com Paco Raya

    excelente post, gracias por él. Tengo una duda sobre el punto "Logo personalizado en el login de admin", ¿a que carpeta images se refiere? a la del theme? a la que hay en wp-admin? o a otra?

    Gracias.

  • http://dsergio.com 23r9i0

    Hola!!

    Mirar leyendo esta entrada he usado el apartado relacionado con el contact form 7 pero he pensado y porque no eliminar el style tambien, asi que aqui os dejo es codigo.

    <code><?php

    function add_wpcf7() {

    if ( is_page('7') ) { // aqui el id de la página de contacto

    wpcf7_enqueue_styles();

    wpcf7_enqueue_scripts();

    }

    }

    if ( !is_admin() && WPCF7_LOAD_CSS && WPCF7_LOAD_JS )

    remove_action( 'wp_print_styles', 'wpcf7_enqueue_styles' );

    remove_action( 'wp_print_scripts', 'wpcf7_enqueue_scripts' );

    add_action( 'wp', 'add_wpcf7' );

    ?></code>

    Saludos!!!

  • http://www.pisos-alquiler.com/ Vicente

    Con el siguiente código insertado en el archivo functions.php de tu tema puedes elegir el numero de post a visualizar en categorías y búsquedas.

    El siguiente código de ejemplo nos permite visualizar 5 post en el index, 7 en las categorías y 10 en los resultados de búsqueda:

    function limit_posts_per_archive_page() {

    if ( is_category() )

    $limit = 7;

    elseif ( is_search() )

    $limit = 10;

    else

    $limit = get_option('posts_per_page');

    set_query_var('posts_per_archive_page', $limit);

    }

    add_filter('pre_get_posts', 'limit_posts_per_archive_page');

    Saludos!!

  • http://www.escuelaalmagitana.com.ar gpatagonia

    Hola, soy nuevo en esto de usar WordPress.

    En http://escuelaalmagitana.com.ar/?page_id=55 necesito quitar el cuadro de "Leave a Replay – Submit Comment", porque como ya hay un formulario de contacto, queda totalmente redundante.

    ¿Cómo debo proceder para quitarlo SOLAMENTE en esta página?

    • http://www.creosignum.com study

      Desde el menu paginas/editar o entradas/editar segun corresponda, buscas la entrada o pagina que queres editar, le das clic a editar y fijate que en uno de los cuadritos de abajo tenes un check que dice permitir comentarios, simplemente lo destildas y guardas los cambios.

  • Pingback: nuevas tecnologias | Noticias SAF

  • Pingback: Twitted by teayudo

  • http://www.facebook.com/profile.php?id=1292895117 Christian Gallego

    Por ahí arriba mencionas cómo eliminar por ejemplo el tema de la versión del rss , de worpress etc.

    Ese tipo de información (ojo que no tengo idea eh) que dices de eliminar, ¿realmente vale para algo a la hora de que se muestren los resultados de una búsqueda por google (por ejemplo) o simplemente se pone para informar al usuario que visita la web y nada más? Ralentiza la carga de web este tipo de cosas(funciones?)?

    Gracias

  • Alvaro

    Muy buen post, y gracias por los tips, dos de ellos los andaba buscando, lo demás muy útiles voy a intentarlo! Saludos!

  • Pingback: Asynchronous Analytics en Wordpress » piernodoyuna

  • Ivan

    Fantástica colección de funciones interesantes..
    ¿Hay alguna función con la que podamos saber el número de visitas que tiene un post? (y un video?)

  • http://www.aqua2webs.com Aqua2webs

    Todas las funciones me parecen realmente útiles, de hecho uso muchas de ellas habitualmente en todos las webs que desarrollo con WordPress, pero necesito incrustar la función de Enviar por e-mail a través de Feedburner y no soy capaz de dar con ello, a ver si fuese posible incrustarla junto con el “Me gusta” y “Twittear” en la siguiente función:

    //botones de FB y TW integrados en el theme
    function share_this($content){
    if(!is_feed() && !is_home()) {
    $content .= ‘

    ID))
    .’&layout=button_count&show_faces=false&width=200&action=like&colorscheme=light&height=21″
    scrolling=”no” frameborder=”0″ style=”border:none;
    overflow:hidden; width:200px; height:21px;”>
    Tweet

    ‘;
    }
    return $content;
    }
    add_action(‘the_content’, ‘share_this’);

    Si dais con ello, ya sabeis, compartir mola ;-)

  • http://www.librodeapuntes.es Bruno Rico

    Gracias por el listado. Muy útil la de

    add_google_analytics

  • AdamBC

    Increíble post, realmente muy útil. 

    Pero me surge una duda: ¿Se pueden ocultar custom fields para usuarios no regitrados de mi blog…? Deseo agregar información que solo sea visible para usuarios registrados. De antemano gracias. 

  • Anónimo

    Que gran post, muy buen aporte, Gracias!

  • raul

    porque ya no se ve el post??…lo borraron o lo estan actualizando??

    • http://fernandotellado.com Fernando

      No sé que ha pasado, a ver si lo arreglo en un rato. Gracias por avisar

    • http://fernandotellado.com Fernando

      Arreglado, gracias por avisar

  • raul

    por el contrario, gracias a uds por esta invaluable información.

  • http://www.perusoloperu.com musica peruana

    Que buenas funciones, esto me ayudara a simplificar mi web.

  • Atl

    permite código html

  • http://vidaextrema.org Miguel

    Excelente información Juan.

    Creo que hacer  uso de algunas funciones de las que comentas aquí evita que uno tenga que instalar varios plugins en sus blog.

    Por lo que considero que el contenido vale oro.

  • Goizalde

    Hola, soy nueva en este mundo de los blogs, tengo uno creado con wordpress y te leo hablar de archivos como functions.php, etc
    Donde se encuentran esos archivos, por más que busco no los encuentro, están en "escritorio"? Como puedo llegar a ellos???
    Mil gracias

    • http://fernandotellado.com Fernando

      Si tu sitio está en wordpress.com no tienes acceso por ftp y entonces no puedes añadir plugins, ni modificar archivos ni nada. Para todo esto hay que tener un WordPress.org instalado

  • Elizabeth

    hola, muchas gracias por todo lo que haces, me pueden ayudar con lo siguiente estoy editando la plantilla webfolio. y no me muestra la parte de slider, dice que debo hacer lo siguiente:
    1. On the post edit page have a text set for Excerpt field.

    2. Set up a custom field called "featured" with value "1".

    3. Set up a custom field called "featured_image" and
    enter the full path to the image you want to be displayed in the in
    slider. Please rememeber that this image has to be 600px X 337px in size.

    Me podrian indicar donde hago estos cambio ?
    gracias por la ayuda
    Elizabeth

    • http://tellado.es Fernando

      En el editor de entradas, como dice en lo que citas

  • Pingback: ¿ Cómo quitar el Author Box ? | SocialTotal

  • David Christian Duqu

    El artículo es válido para la versión 3.3.1. Disculpen la ignorancia jeje.Saludos

  • Sindy anaya mejia

    quiero saver cual es la funcion de ira en wor

  • Joseluisva

    Hola. Una pregunta. Tengo dos blogs, en uno en la informacion de contacto no me deja poner mi twitter usando el link como tal. Me lo borra y pone el username. En el otro esta normal. Como ponerlo normal ???? Slds

  • http://www.caliboweb.es/ Kiko Pacual

    En 'Eliminar el mensaje de error en la pantalla de login de admin' se puede puede devolver un mensaje personalizado en lugar de NULL.
    Una entrada fantástica. Muchas gracias.

  • jose

    excelente, este post me ha ayudado muchísimo, pero tengo otro problema, les comento.

    estoy creando un sitio web con wordpress, uso como tema el Graphene 1.7.2… las entradas se me muestran por hilos, una debajo de la otra, pero necesito encontrar otra forma de visualización, por ejemplo debajo de la ultima entrada, se muestres dos o tres de forma horizontal mas pequeñas, algo asi como se muestran en http://www.foxnews.com/ . tipo una pirámide. por favor cualquier ayuda que me permita lograr modificaciones como la antes mencionada, sera bien agradecida. 

  • http://www.elversiculodeldia.com Braulio

    Muy buena la colección de funciones mostradas aquí. Gracias

    TENGO UNA PREGUNTA:
    Alguna idea de como eliminar las estrellitas que se muestran en la parte de arriba de mi sitio?

    Link: http://www.elversiculodeldia.com/videoscristianos

    Solo se muestran en las entradas individuales.

    Muchas gracias de antemano.

  • http://vidaemigrante.com/foro/ alvaro

    Excelente lista, curiosamente algunas de estas functions ya venían incorporadas a mi theme gratuito que empleo. Hay otras que vienen realmente bien para completar un blog, el uso excesivo de plugins no es nada recomendable.

  • Nestorivanq

    Hola buen dia, 
    Soy nuevo en WordPress, y me parece excelente lo que nos estan ofreciendo, solo tengo un problemita donde encuentro “functions.php?
    Esto creando una pagina en WordPress, la estoy personalizando poro no se como llegar a esta funcion.
    Gracias por la ayuda

  • ignaciosanchez

    Que rara se ve esta web :/

  • Jorge Vargas Vega

    Hola, muy buenos tips.

    Quisiera saber si existe la posibilidad de poder modificar el widget Archivos por defecto de WP y que muestre el total de post MENOS los post de una categoría excluida.
    De este widget he excluido por php una categoría X, sin embargo igual me aparece dentro de la cantidad total de post. Pienso porque cuenta los post publicados del mes.

    Ejemplo:
    Sin excluir la categoría X aparece así:
    Octubre 2012 (15)

    Excluída la categoría sigue apareciendo así:
    Octubre 2012 (15)

    pero quiero que quede de esta forma:
    Octubre 2012 (9)

    Al hacer clic en dicho mes me lista todos los post excepto de la categoría que he excluido. Hasta ahí todo bien pero no logro poder descontar del valor total de post la categoría que he excluido (15-6=9).

    Agradeceré si alguien me puede ayudar

  • Flower

    Hola, estoy analizando los archivos para subir el favicon, puede ser que no encuentre el archivo head.php??

    • josepet

      bien podría ser. Mejor busca por header.php que es el nombre que usualmente recibe el archivo que contiene la cabecera

  • http://twitter.com/darchy darchy

    muy buenos. Y mejor aun que ponerlso en functions.php, hacerte un plugin para no perderlos si cambias de theme ;)

  • http://www.facebook.com/StivenWebDesing Stiven Faustino

    GRACIAS PERO MUCHISIMAS GRACIAS POR EL ARTICULO ME RESOLVIO MUCHAS DUDAS

  • Dan

    El código para insertar el favicon en el dashboard ocasionó un error en mi página y ahora no puedo solucionarlo…. =(

    • Kiko Pascual

      Quita lo que hayas añadido. Cuando hagas un cambio, guarda una copia de
      seguridad de los archivos modificados, esto te solucionara muchos
      problemas.

  • juan trenado

    como se puede editar el slide para que funcione con las flechas del pc. y cambiar el tamaño por defecto del slide con uno fijo

  • manolo inoa

    tengo una pregunta mi nombre es manolo inoa coloco mi nombre porque el sistema no me deja pasar pues me dice que el correo esta en uso.

    tengo un archivo por ejemplo este llamado config.php

    $nombre=’juan’;

    $apellido=’peres’;

    $sexo=’masculino’;

    lo que quisiera que me ayudaran es como crear un código en php
    que al ejecuta me crear este código con este nombre y en los datos que no me modifique las variables de si los datos que vienen desde el formulario y colocarlo dentro de las comillas ‘nombre’

    que siempre que introduzca un nuevo archivo me cree esta pagina llamada config.php.
    dejo aquí mi correo por que como ya comente el sistema no me permitió sino solo como invitado
    empresarioinoa@hotmail.com
    muchas gracias a todo el equipo.

  • tilono

    Me gustaria saber si alguien me puede ayudar.

    Tengo un pdf de 10 paginas y quiero imprimir cada pagina repetida en un dina4.

    Habilito la impresora para imprimir 2 paginas por hoja y pongo la
    siguiente secuencia en paginas:1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10

    y se imprimen 10 paginas y en cada una de ellas 2

    paginas iguales.

    ¿puedo abreviar esta secuencia numerica de alguna forma, pues tengo que
    imprimir mas de 150 paginas y es un coñazo, copiar y pegar? Gracias.

  • Carlos Sanchez

    excelente aportacion, muchas gracias

  • Alejandro

    Desde functions.php quiero agregar una clase css dentro de Como es posible?

  • Sydneykevin

    Hola colega, te voy a ser sincero casi nunca comento pero me ayudaste mucho, gracias espero estar en contacto.