Funciones útiles para functions.php WordPress

diciembre 14, 2016 Post Comment Wordpress Etiquetas:

Buenas amigos, hoy os traigo un artículo con algunas de las funciones más utilizadas en el archivo functions.php WordPress.

Cargar jQuery

Mediante esta función nos aseguramos de que incluir una copia de jQuery. Que obtendremos desde los servidores de Google para ahorrar ancho de banda y para conseguir 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. Podemos adaptar el nombre del widget, y de lo que aparecerá 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>'
));
}

Eliminar basura del área head

Según algunos autores, WordPress coloca mucha cantidad de código inutil en el head. Cosas como el número de versión, y enlaces WLW, RSD…
Para limpiar todo esto basta con esta función.

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

Dicha función nos permite añadir de una manera sencilla Google Analytics.
Sólo tienes que cambiar UA-XXXXX-X por tu código (el que te da Google 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');

Ajustar el tamaño del extracto

Como ya sabes, puedes mostrar un articulo de dos formas, el contenido completo o su extracto. Por defecto, los extractos tienen 55 palabras. Con esta función podrás especificar cualquier longitud (cambia el número 20 a la cifra que quieras).

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

Añadir un favicon a tu blog

Con esta función podrás incluir tu propio favicon para tu web. Símplemente sube el icono al directorio principal de tu web, donde esta robots.txt (el directorio lo puedes cambiar en el código), copia la función en el archivo functions.php, automáticamente aparecerá la línea en el head de tu web.

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 esta vez, para tu área de administración. Crea un icono y súbelo al directorio /images/ (puedes cambiar el directorio si quieres)

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

Puedes cambiar el logo de WordPress que sale en la página de acceso de tu web por otro personalizado con esta función. Símplemente crea una imagen que no sobrepase los 328x84px y súbela al directorio /images/, con el nombre que pongas en la función (en este caso “customlogo.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/customlogo.png) !important; }
</style>';
}

add_action('login_head', 'my_custom_login_logo');

Forzar wp-admin a usar SSL

Útil para los que tengan un certificado SSL, ya sea propio o compartido. Siempre es más seguro el acceso al área de administración mediante HTTPS.

define('FORCE_SSL_ADMIN', true);

Obtener los comentarios más recientes

Con esta función vamos a procesar los comentarios más recientes y mostrarlos.
Para usarlo ediamos la línea dp_recent_comments($no_comments = 10, $comment_len = 35)  en el template de nuestro tema, donde el primer número es el de comentarios que queremos que aparezcan y el segundo es la longitud del texto a mostrar.

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.

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

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.

  • Los parámetros son:
  • Número de Imagen: El número de la imagen que quieres obtener. (por defecto es 0).
  • Mostrar: ( booleano, por defecto false ).

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];
}

Mostrar el Copyright

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

Parámetros:
1. Año: ( por defecto es el año actual ) – Si se da un año previo al actual se mostrará así: 2015 – 2016.
2. Separador: ( por defecto viene: ” – ” ) – Texto utilizado para separar los años (si hemos declarado un año previo al actual).
3. Cola: ( por defecto “. La típica frase de: 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( 2015, ' a ', '. Some rights reserved.' );
// Mostrará: <div id="copyright">&amp;copy; 2015 a 2016. 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;
}