Snippets de WordPress que te sacarán de más de un apuro

Llevo mucho tiempo sin publicar una lista de snippets útiles para mejorar tu tema de WordPress o tu instalación. Así que hoy estoy feliz de mostraros esta ingeniosa lista códigos para hacer que tu blog de WordPress sea aún más potente.

Ver las visitas de cada post sin utilizar un plugin

Algunos plugins pueden ayudarte a trackear las visitas de tus posts, pero debo decirte que no necesitas un plugin para llevarlo a cabo.

Aquí tienes un conjunto de funciones que debes pegar en el functions.php de tu theme.

function getPostViews($postID){
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
        return "0 View";
    }
    return $count.' Views';
}
function setPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}
// Remove issues with prefetching adding extra views
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

Una vez hecho esto, necesitas indicar a WordPress que trackee las visitas utilizando las funciones anteriormente descritas. Pega la siguiente línea en el fichero single.php, dentro del bucle.

setPostViews(get_the_ID());

Para mostrar las visitas, usa esta función dentro del bucle.

echo getPostViews(get_the_ID());

Captura el último login de cada usuario

Algunos sitios webs desarrollados con WordPress permiten a los usuarios registrarse. Si tu sitio tolera que los usuarios se registren, seguramente quieras saber cuándo es la última vez que han hecho login en la web.

Lo primero que debes hacer es pegar el siguiente código dentro del fichero functions.php de tu theme:

// set the last login date
add_action('wp_login','wpsnipp_set_last_login', 0, 2);
function wpsnipp_set_last_login($login, $user) {
    $user = get_user_by('login',$login);
    $time = current_time( 'timestamp' );
    $last_login = get_user_meta( $user->ID, '_last_login', 'true' );
    if(!$last_login){
    update_usermeta( $user->ID, '_last_login', $time );
    }else{
    update_usermeta( $user->ID, '_last_login_prev', $last_login );
    update_usermeta( $user->ID, '_last_login', $time );
    }
}
// get last login date
function wpsnipp_get_last_login($user_id,$prev=null){
  $last_login = get_user_meta($user_id);
  $time = current_time( 'timestamp' );
  if(isset($last_login['_last_login_prev'][0]) && $prev){
          $last_login = get_user_meta($user_id, '_last_login_prev', 'true' );
  }else if(isset($last_login['_last_login'][0])){
          $last_login = get_user_meta($user_id, '_last_login', 'true' );
  }else{
    update_usermeta( $user_id, '_last_login', $time );
    $last_login = $last_login['_last_login'][0];
  }
  return $last_login;
}

Después, deberás pegar este código donde quieras mostrar la fecha del último login del usuario.

// show last login date
global $current_user;
get_currentuserinfo();
echo '<p>Previous: Login date: ' . date("Y-m-d h:m:s", wpsnipp_get_last_login($current_user->ID,true)) . '</p>';
echo '<p>Current: Login date: ' . date("Y-m-d h:m:s", wpsnipp_get_last_login($current_user->ID)) . '</p>';

Mover los archivos de Javascript automáticamente al footer

Para mejorar el tiempo de carga de tu blog desarrollado con WordPress, se recomienda mover ciertos archivos de Javascript al final de tus documentos HTML. Desafortunadamente, no siempre es tan fácil como parece, especialmente cuando utilizamos algunos plugins que insertan código en el header. Aquí tienes una solución simple para mover automáticamente todos los archivos Javascript al footer.

Primero, abre tu fichero functions.php y pega el siguiente código en él:

/**
 * Filter HTML code and leave allowed/disallowed tags only
 *
 * @param string 	$text 	Input HTML code.
 * @param string 	$tags 	Filtered tags.
 * @param bool 		$invert Define whether should leave or remove tags.
 * @return string Filtered tags
 */
function theme_strip_tags_content($text, $tags = '', $invert = false) {

    preg_match_all( '/<(.+?)[s]*/?[s]*>/si', trim( $tags ), $tags );
    $tags = array_unique( $tags[1] );

    if ( is_array( $tags ) AND count( $tags ) > 0 ) {
        if ( false == $invert ) {
            return preg_replace( '@<(?!(?:'. implode( '|', $tags ) .')b)(w+)b.*?>.*?</1>@si', '', $text );
        }
        else {
            return preg_replace( '@<('. implode( '|', $tags ) .')b.*?>.*?</1>@si', '', $text );
        }
    }
    elseif ( false == $invert ) {
        return preg_replace( '@<(w+)b.*?>.*?</1>@si', '', $text );
    }

    return $text;
}

/**
 * Generate script tags from given source code
 *
 * @param string $source HTML code.
 * @return string Filtered HTML code with script tags only
 */
function theme_insert_js($source) {

    $out = '';

    $fragment = new DOMDocument();
    $fragment->loadHTML( $source );

    $xp = new DOMXPath( $fragment );
    $result = $xp->query( '//script' );

    $scripts = array();
    $scripts_src = array();
    foreach ( $result as $key => $el ) {
        $src = $result->item( $key )->attributes->getNamedItem( 'src' )->value;
        if ( ! empty( $src ) ) {
            $scripts_src[] = $src;
        } else {
            $type = $result->item( $key )->attributes->getNamedItem( 'type' )->value;
            if ( empty( $type ) ) {
                $type = 'text/javascript';
            }

            $scripts[$type][] = $el->nodeValue;
        }
    }

    //used by inline code and rich snippets type like application/ld+json
    foreach ( $scripts as $key => $value ) {
        $out .= '<script type="'.$key.'">';

        foreach ( $value as $keyC => $valueC ) {
            $out .= "n".$valueC;
        }

        $out .= '</script>';
    }

    //external script
    foreach ( $scripts_src as $value ) {
        $out .= '<script src="'.$value.'"></script>';
    }

    return $out;
}

Una vez hecho, edita el fichero header.php. Reemplaza el tag wp_head() por esto:

<?php
ob_start();
wp_head();
$themeHead = ob_get_contents();
ob_end_clean();
define( 'HEAD_CONTENT', $themeHead );

$allowedTags = '<style><link><meta><title>';
print theme_strip_tags_content( HEAD_CONTENT, $allowedTags );
?>

Y finalmente, pega el siguiente código dentro del footer.php, justo antes del cierre del tag body.

<?php theme_insert_js( HEAD_CONTENT ); ?>

Mostrar un aviso en los posts antiguos

Si tu blog trata sobre asuntos tecnológicos, es posible que los artículos que tengan más de 5 años se hayan quedado un pelín desfasados. Si un post es muy antiguo, puede ser buena idea avisar a tus lectores sobre que la información que están leyendo tiene ya mucho tiempo.

Pega el siguiente código en tu fichero single.php, dentro del bucle. Edita el texto de la línea 7 con tu propio texto.

<?
$ageunix = get_the_time('U');
$days_old_in_seconds = ((time() - $ageunix));
$days_old = (($days_old_in_seconds/86400));

if ($days_old > 365) {
  echo '<div class="disclaimer">DISCLAIMER: this post is older than one year and may not be up to date with latest WordPress version.</div>'; 
} 
?>

Rellena el editor con contenido por defecto

Si a menudo publicas listas, reseñas o cualquier otro tipo de artículos con un diseño específico, este truco puede ahorrarte mucho tiempo, ya que rellena el editor de WordPress con contenido a tu elección, y es compatible con varios tipos de posts.

Aquí está el código que debes pegar en el archivo functions.php. Guarda el archivo después de modificar los valores de las variables $content, y ya está.

add_filter( 'default_content', 'pu_default_editor_content' );

function pu_default_editor_content( $content ) {
    global $post_type;

    switch( $post_type ) 
    {
        case 'post':
            $content = 'Default content for blog posts.';
        break;

        case 'page':
            $content = 'Default content for pages.';
        break;

        case 'portfolio':
            $content = 'Default content for your portfolio pages.';
        break;

        case 'products':
            $content = 'Default content for blog posts.';
        break;
    }

    return $content;
}

Fuente: catswhocode.com

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.