1.001 Funciones para WordPress

Publicado por el 7 , Mayo, 2015, en BLOGGING, Comentarios desactivados en 1.001 Funciones para WordPress

¡Importante!

importante wordpressAntes de nada, aconsejarte que guardes este megapost-manual de funciones para WordPress en tus favoritos porque esto no va a quedar aquí e iré añadiendo muchas funciones más, hasta que nos salgan por las orejas 😉


Para qué sirven

Las funciones para Wordpress sirven para  ampliar, cambiar o alterar el comportamiento por defecto de WordPress. Se comporta exactamente igual que un plugin, añadiendo características y funcionalidad a una web, y se puede utilizar tanto para definir nuevas funciones PHP como para modificar las que ya incorpora el sistema.

Cómo implementarlas

implementar funciones wordpressImplementar funciones o hacer que funcionen es muy fácil aunque no te lo creas. Simplemente busca el archivo de funciones (functions.php) dentro de la carpeta de instalación de tu tema activo de WordPress y añade el trocito de código de la función deseada.

…/wp-content/themes/mitema/functions.php

Hay veces que suele tener un nivel más de carpetas según el tema o plantilla y otros en vez de functions lo suelen llamar options o algo así, pero es en casos muy escasos.


Una vez dicho esto estás preparado para implementar la función que desees. La mayoría de las funciones se pueden también realizar a través de plugins gratuitos, pero si eres de los que no les gusta instalar plugins para todo te voy a dejar un mogollón de funciones para WordPress.

Para hacértelo más fácil he creado una tabla para que vayas directamente a la función que quieras y así no tengas que tragarte entero este tan aburridísimo como interesante post.

Cargar JQuery Función Plugin
Crear Widgets Función
Crear taxonomías Función Plugin
Crear campos personalizados globales Función Plugin
Permitir comentarios anidados Función
Eliminar basura del header Función
Añadir Google Analytics al footer Función
Cambiar tamaño del extracto Función Plugin
Añadir un favicon a tu sitio Función Plugin
Añadir un favicon a tu area de administración Función Plugin
Logo personalizado en el login Función Plugin
Eliminar el mensaje de actualizaciones de WordPress Función Plugin
Eliminar el mensaje de error en la pantalla de login Función
ID de la Categoría en Body y en la clase de la entrada (post) Función
Obtener el Id de la primera categoría Función
Crear un código corto (shortcode) para el enlace de portada Función Plugin
Eliminar la versión de WordPress del header y del feed Función
Limpiar pigbacks y trackbacks de los comentarios Función
Contar el número de comentarios (sin trackbacks ni pingbacks) Función
Obtener y mostrar la primera imagen de una entrada Función Plugin
Obtener los artículos más recientes Función
Obtener los artículos más populares basado en el número de comentarios Función Plugin
Mostrar el Copyright Función
Botón para abrir los PDF en Google Docs Función Plugin
Añade un ID al ul que se encuentra dentro de un menu desplegable Función
Cambiar el avatar por defecto Función Plugin
Añade los scripts de Contact Form 7 sólo en las páginas seleccionadas Función

Cargar jQuery

Mediante esta función para Wordpress, 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 mejorar la rapidez de carga para el usuario. (Si tienes alguna otra función relacionada con jQuery debería ir debajo de ella).

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 de wordpress, es de sobra conocida pero yo te la cuento igualmente. Se puede adaptar en función del nombre del widget, y de lo que quieras 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>'
    ));
}

Crear taxonomías

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 campos personalizados globales

Con esta funció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.

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

<?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 } ?>

Permitir comentarios anidados

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

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 Header

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, etc.
Para limpiar todo esto basta con esta utilizar esta función dentro de functions.php de tu theme.

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 nalytics en el footer

Añade de manera sencilla Google Analytics.
Sólo requiere cambiar UA-XXXXX-X por tu código (el que te dará Google Analytics). Esta función utiliza el sistema ga.js, pero se puede cambiar a cualquiera de los otros que ofrece Analytics.

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');

Cambiar tamaño del extracto o excerpt

En WordPress puesdes mostrar el contenido completo de un post o su extracto. El extracto tiene un límite de 55 palabras. Esta función te permite cambiarlo por la longitud deseada (cambia el número 20 a la cifra que desees).

function custom_excerpt_length($length) {
    return 20;
}
add_filter('excerpt_length', 'custom_excerpt_length');

Añadir favicon a tu sitio wordpress

Símplemente tendrás que subir 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.

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 favicon al tu área de administración WordPress

Igualmente que en 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 crear el directorio con otro nombre a tu gusto)

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

Puedes cambiar el logo de WordPress que sale en el wp-login de la página de administración de tu web por otro con esta función. Crea una imagen no mayor de 328 x 84 px y súbela al directorio /images/ de tu servidor con el nombre que pongas en la función (en este caso “logo.png”. Si no lo tuvieras créalo. El código a incluir en functions.php

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

add_action('login_head', 'my_custom_login_logo');

Eliminar el mensaje de actualizaciones de WordPress

Con esta función eliminarás el mensaje que aparece en el panel de administración que te pide que actualices tu versión de WordPress.

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

Cuando escribes mal la contraseña un mensaje te dice que lo que está mal es la contraseña, lo cual no es muy seguro porque da pistas de cual es el error. Con este código escrito en functions.php lo solventarás.

add_filter('login_errors',create_function('$a', "return null;"));

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

WordPress no incluye el número ID de la categoría de la entrada actual en body_class ni en post_class. Esta función te permitirá hacerlo.

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 obtenerla donde quieras usa get_first_category_ID(); 

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

Crear un 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 de tu sitio. Puedes probarla para crear otros enlaces. Tienes que cambiar miweb.com por la URL de tu Home, etc..

function myHomePage() {
return '<a href="http://miweb.com/"
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

Para usarlo, normalmente en comments.php escribe

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

Contar el número de comentarios

Para usarlo simplemente pon comments_number() donde quieras mostrar el número de comentarios del sitio.

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

Obtener y mostrar la primera imagen de una entrada

Con esta función obtendrás la primera imagen que se encuentre dentro del contenido de cada post.

Los parámetros son:
Número de Imagen: Número de la imagen que deseas obtener (por defecto 0, que es por el número que empieza).
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 en functions.php escribe esto:

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 o posts más recientes

Parámetros:
Cantidad: (por defecto 5 ) – Número de posts a mostrar.
Categorías: (por defecto todas las categorías ) – Categorías a incluír o excluir.
HTML anterior: ( por defecto li ) – HTML antes del enlace al artículo.
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 posts más populares basado en el número de comentarios obtenidos

Puedes cambiar el número de artículos cambiando LIMIT al final de $popularposts (en el ejemplo se mostrarían 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 Copyright

Muestra una información de copyright dinámica, es decir, se irá actualizando cada año.

Parámetros:
Año: ( por defecto el año actual ) – Si se da un año previo al actual se mostrará así: 2006 – 2008.
Separador: ( por defecto: ” – ” ) – Texto utilizado para separar los años (en el caso de que se haya declarado un año previo al actual).
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>

Y escribe en functions.php:

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

Para usarla:

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

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 tienes 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) utiliza 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

Crea tu nuevo avatar de 100×100 pixels. Súbelo a /wp-content/themes/tu-tema/images/, guardándolo como gravatar.jpg y añade este código a 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

Los scripts de este conocido plugin de formularios se añaden en todas las páginas, esté presente el formulario o no. Con esta función evitarás este problema. Por ejemplo, si sólo lo quieres 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' );

 


sudandoEspero que alguna de todas estas funciones o tips para WordPress te hayan sido de gran ayuda y hayas aprendido bastante para crear las tuyas propias.

Si tienes alguna duda de cualquiera de ellas deja un comentario y estaré encantado de resolverla.

Carlos Ramos Marquez

Amante del diseño y desarrollo en tecnologías Web y luchador en la gran batalla del posicionamiento SEO, elaborando las estrategias del comandante Google.

Ver mis posts - Ir a mi web

Sígueme:
TwitterFacebookGoogle Plus

Etiquetas:

, ,
Comments are closed.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies