fuente: http://www.brandominus.com/funciones-para-wordpress-hasta-por-las-orejas/
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 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 echoget_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.
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.
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 elhead 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();
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:
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:
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.
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">&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">&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 ) . ' © ' . 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 tipowp_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' );
No hay comentarios.:
Publicar un comentario