Entradas relacionadas con miniatura sin plugins

guru del código

Las entradas relacionadas son un modo estupendo de atraer a tus lectores hacia otras publicaciones de temática similar, aumentando la fidelidad y permanencia en tu web de los visitantes, así que es un elemento fundamental y casi obligatorio en cualquier sitio.

Si le sumamos una atractiva miniatura de imagen que le de mayor visibilidad a las entradas relacionadas mejor que mejor ¿no?

Pues bien, cómo ya hemos visto en otras ocasiones cómo mostrar entradas relacionadas con código, o uno de los mejores plugins para mostrar entradas relacionadas con miniatura, hoy rizamos el rizo y unimos ambas posibilidades.

posts-relacionados-con-miniatura

Para mostrar entradas relacionadas con miniatura sin plugins hay 3 pasos fundamentales, a saber … 

1. Añadir soporte de miniaturas al tema

Esto ya lo hemos visto varias veces pero lo repasamos por si no lo has añadido ya. Para ello añade al fichero functions.php de tu tema la siguiente línea, con la que le añadimos soporte de miniaturas de entrada:

add_theme_support( 'post-thumbnails' );

Y además, siempre es conveniente definir los tamaños de miniatura adaptados lo mejor posible al diseño:

add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 100, 50, true );

A partir de ahí solo tienes que acordarte de que en cada entrada definas una “Imagen destacada” desde la “meta box” del editor así denominada.
imagen destacada

2. Añadir el código al loop

En el loop del archivo single.php debemos añadir el código que mostrará las entradas relacionadas. El sitio ideal sería antes de la llamada a los comentarios, que identificarás por el siguiente código:

<?php comments_template(); ?>

El código sería algo así:

<div class="relacionadas">
<h3>Entradas relacionadas</h3>
<?php
        $orig_post = $post;
        global $post;
        $tags = wp_get_post_tags($post->ID);
        
        if ($tags) {
        $tag_ids = array();
        foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
        $args=array(
        'tag__in' => $tag_ids,
        'post__not_in' => array($post->ID),
        'posts_per_page'=>4, // Número de entradas relacionadas a mostrar.
        'caller_get_posts'=>1
        );
        
        $my_query = new wp_query( $args );

        while( $my_query->have_posts() ) {
        $my_query->the_post();
        ?>
        
        <div class="miniaturarelacionada">
                <a rel="external" href="<? the_permalink()?>"><?php the_post_thumbnail(array(150,100)); ?><br />
                <?php the_title(); ?>
                </a>
        </div>
        
        <? }
        }
        $post = $orig_post;
        wp_reset_query();
        ?>
</div>

Básicamente, lo que hace el código anterior es identificar las tags en que está etiquetada la entrada actual para, a continuación, mostrar otras entradas etiquetadas con las mismas tags, excluyendo la entrada actual, que identifica por su ID único. en la línea 14 definimos el número de entradas a mostrar (en el ejemplo 4), que puedes cambiar a tu gusto.

3. Añadir estilos mediante CSS

Ahora bien, lo anterior no quedaría bonito ni atrayente si no creamos unas clases CSS adecuadas, que atraigan atención y coloquen las entradas relacionadas de manera ordenada.

Por tanto, y usando las mismas denominaciones de clases CSS de ejemplo usadas en el código previo, habría que crearlas en la hoja de estilos de tu tema activo, habitualmente el archivo style.css.

Lógicamente, es solo un ejemplo, y debes adaptarlo a los estilos generales de tu tema o tus gustos personales …

.relacionadas {width: 640px; margin: 0 0 20px 0; float: left; font-size: 12px;}
.relacionadas h3 {font-size: 20px; margin: 0 0 5px 0; }
.miniaturarelacionada {margin: 0 1px 0 1px; float: left; }
.miniaturarelacionada img {margin: 0 0 3px 0; padding: 0;}
.miniaturarelacionada a {color :#333; text-decoration: none; display:block; padding: 4px; width: 150px;}
.miniaturarelacionada a:hover {background-color: #ddd; color: #000;}

Lo que hace este CSS de ejemplo es mostrar las miniaturas con un ancho de 150 pixels, lo que significa que para un ancho del bloque principal de 640 pixels mostraría 4 entradas, márgenes incluidos. Por descontado que debes ajustar esto a tus necesidades, reduciendo el valor .miniaturarelacionada a 125 pixels si quieres 5 miniaturas, por poner un ejemplo. No digamos si el ancho del bloque de la entrada de tu tema WordPress es menor de 640 pixels.

También, y para terminar, es importante que definas el ancho de las miniaturas en los ajustes multimedia de WordPress al mismo tamaño especificado en el CSS que, además, debe coincidir con el tamaño definido en el código php en the_post_thumbnail(array(150,100).

Por lo demás funciona de maravilla, siempre y cuando etiquetes tus entradas claro, sino verás un feo espacio en blanco.

Limpiando la base de datos con PHP y MySQL

Este post es continuación de Limpieza de links erróneos: codificando un PHP, Ejecutando consultas de MySQL desde PHP, Leyendo un archivo desde PHP y Escribiendo en archivos desde PHP

Ahora que ya sabemos con PHP leer y escribir en archivos, así como el método para ejecutar consultas de MySQL, tenemos todos los ingredientes para completar el programa que nos limpie la base de datos de links erróneos.

Volvamos al capítulo 1 de esta serie para recordar que lo que queremos es sustituir ciertas URLs (por ejemplo, del estilo “http://www.blogpocket.com/archivo-extendido/?arch=posts0409&articulo=verpermalink&id=200405301″) por el enlace a una página de error (por ejemplo “http://www.blogpocket.com/pagina-error”).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
$file = fopen("entrada.txt", "r") or exit("Es imposible abrir el archivo");
$contador_registros=0;
$contador_actualizados=0;
$contador_noactualizados=0;
$contador_noencontrados=0;
$fp = fopen("salida.txt","a");
$con = mysql_connect("localhost","XXX","YYY");
if (!$con)
  {
     die('Error al conectarse a la base de datos' . mysql_error());
  }
else 
  {
     echo "conexion ok<br />";
     mysql_select_db("AAA", $con);
     while(!feof($file))
       {
           $linea = fgets($file);
           $linea = eregi_replace("[\n|\r|\n\r]", "", $linea);
           $contador_registros++;
           $consulta="SELECT * FROM wp_posts WHERE post_content LIKE '%".$linea."%'";
           $result = mysql_query($consulta);
           $encontrado= = 0;
           while($row = mysql_fetch_array($result))
              {
                 $encontrado = 1;
                 $la_id=$row['ID'];
                 $contenido=$row['post_content'];
                 $titulo=$row['post_title'];
                 $nuevo_contenido=str_replace($linea,"http://www.blogpocket.com/pagnina-error",$contenido);
                 $actualizacion = "UPDATE wp_posts SET post_content = '".$nuevo_contenido."' WHERE id = $la_id";
                 mysql_query($actualizacion); 
                 if (mysql_error()) 
                   {
       	              $contador_noactualizados++;
                   }
                 else 
                   {
       		      $contador_actualizados++;
  	           }
              }
           if ($encontrado==0)
             {
                fwrite($fp, $linea . PHP_EOL);
                $contador_noencontrados++;
             }
       }
     fclose($fp);
     fclose($file);
     echo "<br />Total registros tratados = ".$contador_registros;
     echo "<br />Total registros actualizados correctamente = ".$contador_actualizados;
     echo "<br />Registros no actualizados".$contador_noactualizados;
     echo "<br />Registros no encontrados".$contador_noencontrados;
  }
?>

Lo nuevo de este programal respecto a los que hemos visto anteriormente, es la utilización de dos llamadas a la función mysql_query (que, como ya vimos, envía una consulta MySQL a la base de datos): una (línea 23), para buscar todos los posts en dónde se encuentra un determinado literal (en este caso, la URL que deseamos modificar); y otra (línea 33), para actualizar éste con la nueva URL.

Para sustituir una URL por otra se utiliza la función str_replace (línea 31) que reemplaza en la variable $contenido todas las apariciones del string buscado (alojado en la variable $linea) con el string de reemplazo.

La función mysql_error nos permite controlar el resultado de la consulta MySQL, ya que devuelve el texto del error de la llamada. En nuestro caso, simplemente aumentamos una unidad a las variables $contador_noactualizados o $contador_actualizados dependiendo de si ha habido error o no.

Y, finalmente, la variable $encontrado se emplea para saber si existen posts con la URL que buscamos. Si se sale del bucle while sin conseguir poner la variable $encontrado a 1 es que no hay posts con esa URL. Entonces, se graba el registro en el archivo de salida.

El archivo de entrada, claro está, contiene una línea por cada URL a buscar.

Te ruego encarecidamente que no ejecutes ningún programa de este estilo si no estás seguro de lo que haces y no tienes un backup de la base de datos de tu blog.

Con esta entrada finalizamos esta serie de cinco dedicados a codificar un programa básico para modificar la base de datos de WordPress. Hemos empleado las instrucciones y estructuras de programación más elementales con objeto de facilitar la comprensión del código. También se ha escrito el programa de la forma más visual y legible posible y se ha huido de instrucciones más complejas con ese mismo fín.

Enlace a comentarios solo si están activos

sin comentarios

En enlace a los comentarios, ya sea en portada o página de entrada sencilla de WordPress es muy útil, pero no tiene sentido cuando – por algún motivo – tienes desactivados los comentarios, algo muy común especialmente en las páginas.

Por descontado, es una promesa incumplida que no dejará satisfechos a tus visitantes.

comentarios desactivados

Si quieres evitar este indeseado, e indeseable efecto, solo tienes que hacer un pequeño cambio en el código que enlaza a los comentarios. Para ello localiza el siguiente código (puede haber variaciones menores) en tus archivos (index.php, single.php, archive.php, categories.php, etc):

<?php
comments_popup_link( 'No hay comentarios', '1 comentario', '% comentarios', 'comments-link', 'Comentarios desactivados');
?>

Y simplemente cámbialo por este otro:

<?php
if ( comments_open() ) :
comments_popup_link( 'No hay comentarios', '1 comentario', '% comentarios', 'comments-link', 'Comentarios desactivados');
?>

La magia está en la segunda línea, que introduce un condicional para que solo se muestren los siguientes enlaces si los comentarios están activos. Simple y efectivo ¿no?

Ejecutando consultas de MySQL desde PHP

Este post es continuación de Limpieza de links erróneos: codificando un PHP

Continuamos elaborando ese programita que nos permita limpiar links erróneos. Hoy le añadiremos unas pocas instrucciones al código que estuvimos viendo en Limpieza de links erróneos: codificando un PHP.

Lo que vamos a hacer es ejecutar una consulta de MySQL para localizar todos los posts que contienen una URL determinada. Para ello, se emplea la función mysql_query a la que se le pasa como parámetro un literal que es la consulta en sí.

No entraremos en detalle a explicar el lenguaje SQL, que es el que nos permite interactuar con una base de datos, pero en pocas palabras diremos que con SELECT indicamos qué campos queremos extraer, con FROM la tabla con la que deseamos operar y con WHERE imponemos las condiciones de búsqueda (en este caso se utiliza el operador LIKE junto con el caracter “%”). Es como si dijéramos: extrae todos los campos de la tabla “wp-posts” (donde se encuentran los posts de una base de datos de WordPress) en aquellos casos en los que el campo “post-content” (el contenido) contenga el literal que se indica entre “%”.

La función mysql_query arroja como resultado un array (una tabla indexada de tantas filas como posts existan y tantas columnas como campos tenga la tabla “wp-posts”), que debe tratarse posteriormente mediante la función mysql_fetch_array, o FALSE.

La función mysql_fetch_array devuelve un valor del array o FALSE si no hay más filas. Por eso la condición de la estructura “While” (mientras que) es “$row = mysql_fetch_array($result))”. Una condición que realiza varios trabajos a la vez: indexa el array desde su primer elemento hasta el último, introduce cada valor del array en la variable $row y obliga la finalización del bucle que recorre el array cuando ya no hay más filas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$con = mysql_connect("localhost","AAA","BBB");
if (!$con)
   {
      die('Error de conexion: ' . mysql_error());
   }
else 
   {
      echo "conexion ok";
      mysql_select_db("YYY", $con);
      $result = mysql_query("SELECT * FROM wp_posts WHERE post_content LIKE '%http://www.blogpocket.com/scripts/view.php?arch=posts0408&articulo=verpermalink&id=200408151%'");
      echo "<br />";
      while($row = mysql_fetch_array($result))
        {
           $contenido=$row['post_content'];
           echo $contenido;
           echo "<br />";
        }
    }
?>

Así que para cada valor del array $result, se ejecuta el conjunto de instrucciones del bucle “while”. Dichas instrucciones lo que hacen es asignar el valor del campo “post_content” (todo el contenido del post) a la variable $contenido y mostrarlo en pantalla con la sentencia “echo”. La sentencia “echo” es capaz de mostrar en pantalla código HTML, por lo que si queremos que exista diferenciación visual entre los contenidos de todos los posts que se han encontrado, hay que añadir un salto de línea (“<br />”).

Lo que hemos hecho, como dije en el post anterior, es buscar todos los posts que contienen la URL http://www.blogpocket.com/scripts/view.php?arch=posts0408&articulo=verpermalink&id=200408151 y mostrarlos en pantalla, si es que existe alguno.

Pruébalo, sustituyendo la URL entre “%” por cualquier literal que quieras buscar. Y recuerda cambiar los valores AAA (usuario), BBB (password) e YYY (nombre de la base de datos) por tus credenciales de la base de datos.

¡Ah! y asegúrate de que posees un backup de tu base de datos de WordPress antes de ejecutar cualquier programa que desarrolles, sobre todo si realiza modificaciones sobre ella (cuestión que veremos en un próximo post).

Limpieza de links erróneos: codificando un PHP

Tengo un archivo CSV con 12.200 filas y 39 columnas. No me pregunten cómo se generó, solamente sé que el culpable de tal engendro es mi buen amigo Gustavo Arizpe ;) . Ese intratable fichero contiene todos los errores de Blogpocket.com, que después de 12 años son unos cuantos los links rotos y otras lindezas lo que guardamos ahí.

Además de quedarme con la boca abierta por un rato, lo primero que pensé fue “¿Y ahora qué?”. El bueno de Gustavo me envió el archivo como el que envía un dardo envenenado. Lo primero que me dijo fue que cargara el archivo en Google Docs. Se quedó tan tranquilo. Pero Google Docs no solo se rió de mí sino que me dio una patada en salva sea la parte. Yo no dormí esa noche :P .

A la mañana siguiente, volví a abrir el archivo, con la esperanza de que todo hubiese sido una pesadilla, pero allí estaban las 574.800 y pico celdas, relucientes, vivitas y coleando.

El asunto de los links rotos es un problema que muchos blogs veteranos poseemos, pero a Google no le gustan. Existen muchos plugins de WordPress para, supuestamente, resolver el problema. Pero no se fíen, yo lo he intentado y lo único que he logrado es introducir más basura en el blog: los links han sido sustituido por URLs extrañas.

Así que solo se me ocurrió una cosa: arremangarme y codificar un poquito de PHP para sustituir en la base de datos todas las llamadas a URLs erróneas por una página del blog que indique que existe un error en dicha URL. Cada columna del csv requerirá un tratamiento específico pero, por lo menos, será viable.

La primera columna titulada “Overly-Dynamic URL” corresponde a URLs del tipo “http://www.blogpocket.com/archivo-extendido/?arch=posts0409&articulo=verpermalink&id=200405301″. Esas son llamadas de mi sistema de blogging, programado por mi, anteriores a la migración de mi blog a WordPress. Así que podemos prescindir de todas ellas, sustituyéndolas por “http://www.blogpocket.com/pagina-error”.

El código PHP lo “único” que tiene que hacer es leer un archivo con todas las URLs y, para cada una, encontrar todos los posts en donde se incluya. Después, se debe sustituir allá dónde aparezca por la nueva URL. ¿Fácil, no?

Para que todos podamos entenderlo, lo iré explicando en sucesivos posts. Hoy solo expondré cómo se puede acceder a la base de datos de tu blog de WordPress desde un programa PHP; es decir, uno que escribas en tu ordenador y lo subas a la carpeta raiz, en la que se encuentra instalado tu blog. Como un plugin, pero sin estar dentro de la instalación de WordPress ;) .

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$con = mysql_connect("localhost","XXX","YYY");
if (!$con)
  {
     die('Error de conexion: ' . mysql_error());
  }
else 
  {
     echo "conexion ok";
     mysql_select_db("AAA", $con);
  }
?>

Este programita tan sencillo nos servirá de base para poder “limpiar” la base de datos de errores SEO. En él se utiliza la función mysql_connect, que está obsoleta a partir de PHP 5.5.0, pero que funciona, de momento (en caso contrario habría que utilizar la función mysqli_connect()). Lo que hace es abrir una conexión al servidor MySQL, por lo que es necesario proporcionar el usuario (XXX) y la password (YYY) del mismo. Sustituye esos valores (XXX e YYY) por los tuyos.

El resultado de la llamada a mysql_connect es un identificador de enlace de MySQL, en caso de éxito, o FALSE en caso de error. El identificador de enlace (que se guarda en la variable $con) se emplea, en caso favorable (“conexión ok”) para conectarte a una base de datos concreta “AAA” con la función mysql_select_db. Sustituye AAA por el nombre de la base de datos a la que te quieres conectar.

Lo que sigue es para los principiantes.

El signo de admiración (cierre) es un operador que se utiliza para convertir en falso el valor de la variable $con. Es lo mismo que preguntar por la negación de un valor: si no se consigue el identificador de enlace, ejecutar la sentencia die que imprime un mensaje mediante la función mysql_error y termina el script actual.

La estructura “If-else” nos permite ejecutar un conjunto de instrucciones en caso de cumplirse un valor y, en caso contrario, otro. Los conjuntos de instrucciones se engloban entre los caracteres “{” y “}” (para el caso de la sentencia “die” no haría falta porque solo queremos ejecutar una).

Los scripts PHP van precedidos de “<?php” y se finalizan con “?>”.

Las funciones que, en su llamada, no llevan parámetros (valores que se necesitan para su funcionamiento) se ponen con “()”, por ejemplo: mysql_error().

Para asignar el valor de una variable a otra se utiliza el signo “=”. El valor de la variable que está a la derecha del signo “=” se introduce en la variable que está a la izquierda. Por ejemplo: “$con = mysql_connect(“localhost”,”XXX”,”YYY”);”. En este caso, la llamada a la función mysql_connect hace las veces de una variable porque al finalizar la función, se obtiene un resultado de salida (el identificador de enlace o el valor FALSE).

Todas las instrucciones se separan, en PHP, con “;”, excepto las estructuras como “If-else”. Las constantes (valores concretos) deben ir entre comillas, como el nombre de usuario, por ej. “XXX”.

AVISO IMPORTANTE: Cambia la configuracion de tu suscripcion a Blogpocket en tu agregador poniendo el feed nativo http://www.blogpocket.com/feed, ya que el de FeedBurner lo usaremos, como maximo, hasta el proximo 1 de Julio de 2013.

Suscribete tambien a Blogpocket.com por e-mail.

Contadores sociales en WordPress

social media soup

Hoy te traigo un truco rápido y sencillo: añadir un contador de las veces que se han compartido una entrada de WordPress en las redes sociales principales (Twitter, Facebook y Google Plus).

Añadirlo es muy sencillo, solo tienes que copiar este código que tienes a continuación y pegarlo en donde quieras que aparezca el contador en tu tema WordPress, ya sea en portada o, lo más habitual, en la plantilla de entrada sencilla (single.php):

function social_shares() {
    $url = get_permalink( $post_id ); 
    $json = file_get_contents(&quot;http://api.sharedcount.com/?url=" .
rawurlencode($url));
    $counts = json_decode($json, true);
    $totalcounts= $counts[&quot;Twitter&quot;] + 
$counts[&quot;Facebook&quot;][&quot;total_count&quot;] +
$counts[&quot;GooglePlusOne&quot;];
    echo &quot;&lt;div&gt;$totalcounts Share&lt;/div&gt;&quot;;
}

Estupendo truco creado por Davide y compartido en WP recipes.

Guía para crear el perfecto tema WordPress

developer

En ThemeShaper han creado una guía para cualquier desarrollador que quiera crear un tema WordPress que atienda a todos los estándares, de manera que ofrezca la mejor experiencia puramente WordPress.

La guía está pensada para desarrolladores de temas para WordPress.com pero es igualmente útil para cualquier entorno WordPress. Y cómo creo que es de un tremendo interés aquí lo tienes en español …

Escapes

  1. Todos los datos dinámicos deben tener escape con esc_attr() antes de entregarse como atributo HTML
  2. Todas las urls dinámicas deben tener escape con esc_url().
  3. Si los datos dinámicos se entregan cómo el atributo de un elemento script HTML deben tener escape con esc_js().
  4. Las peticiones SQL que contengan datos dinámicos deben tener escape con $wpdb->prepare().

Internationalización

  1. Todos los textos visibles para el usuario deben prepararse para traducción.
  2. Evita HTML dentro de cadenas de las funciones “gettext” siempre que sea posible.
  3. La salida de sprintf() debe tener escape en las cadenas de texto utilizadas en los atributos.
  4. Los localizadores printf() deben tener escape antes de incluirlos en atributos HTML.
  5. Ofrece contexto donde haga falta.
  6. Evita anti-patrones comunes.

Peticiones (queries)

  1. Las peticiones SQL directas deben evitarse. Es mejor utilizar uno de los nuevos objetos WP_Query cuando sea posible.
  2. No pueden usarse peticiones ilimitadas. Básicamente, esto significa que el parámetro posts_per_page de WP_Query no puede establecerse a -1. Además, el parámetro numberposts de get_posts() (y funciones similares) también debe tener un valor positivo.
  3. Las peticiones grandes deben cachearse de manera transitoria.
  4. No se puede usar query_posts(). Si necesitas modificar la petición principal es mejor usar el filtro pre_get_posts. Si necesitas recuperar entradas además de la petición principal es mejor usar el nuevo objeto WP_Query.
  5. Los valores vacíos no deben pasarse al argumento  post__in usado para crear un nuevo objeto WP_Query. Si estás usando un valor dinámico que deba estar vacío es importante comprobar que está vacío antes de usar el valor en la petición (ejemplo).
  6. Las peticiones de términos deben comprobarse en una instalación que tenga 10.000 términos.

Envíos a la cola (enqueues)

  1. Todos los archivos de terceros incluidos deben ser compatibles con la licencia GPL.
  2. Asegúrate de que se usa el protocolo adecuado para poner en espera archivos de terceros.
  3. Asegúrate de que se usan los hooks adecuados para poner en espera scritpts y estilos.

Scripts

  1. Usa los scripts incluidos en la instalación estándar si existen.
  2. Los scripts personalizados no deben minimizarse.
  3. Los scripts de terceros que se incluyan no pueden minimizarse pero deben incluir lo siguiente:
    1. El nombre de la librería.
    2. Número de versión
    3. Licencia
    4. URL

Estilos

  1. La hoja de estilos principal (style.css) debe ponerse en espera durante la acción wp_enqueue_scripts.
  2. Nunca se debe utilizar overflow:hidden para que contenga objetos flotantes (floats). Es una alternativa mejor usar micro clearfix.
  3. La clave !important no debe utilizarse donde sea suficiente una especificación.
  4. El poner en espera una fuente de Google con varios bloques de caracteres incluye de manera condicional los bloques con gettext.
  5. No están permitidas los atributos de estilo en tags HTML.

Conflictos con plugins

El entorno de WordPress.com está sobrecargado con una gran cantidad de plugins que ofrecen funcionalidades compartidas con todos los temas. Para ofrecer a los usuarios una experiencia consistente no deberían incluirse en los temas funcionalidades que dupliquen las de los plugins. Esto también debe ser aplicable a otros entornos.

A la hora de diseñar temas para WordPress.com esto es lo se usa:

  1. Las opciones de publicidad se gestionan con WordAds.
  2. Los ajustes de color personalizado se gestionan con el plugin Custom Colors.
  3. Los ajustes de fuentes personalizadas se gestionan con el plugin Custom Fonts.
  4. Los favicons se gestionan con el plugin Blavatar.
  5. Se usa soporte HiDPI para las imágenes subidas por los usuarios
  6. El scroll infinito lo ofrece Jetpack.
  7. Protocolo Open Graph
  8. Soporte de Twitter meta tag
  9. Diversos widgets

Portabilidad de datos

Asegurar que el contenido del usuario no cambia cuando cambia de tema es muy importante. Las siguientes características de la instalación estándar de WordPress, aunque son fantásticas por si solas, pueden provocar un cambio en el contenido del usuario o no estar disponible si se activan desde el tema.

  1. Tipos de entradas personalizas públicas
  2. Taxonomías personalizadas públicas
  3. Campos personalizados o campos meta de entradas
  4. Códigos cortos (shortcodes)

Opciones del tema

Si tu tema incluye ajustes personalizados es altamente recomendable usar el Personalizador en vez de una pantalla personalizada de administración. Hacerlo así tiene muchas ventajas:

  1. Los usuarios pueden ver sus cambios inmediatamente, ya que se adapta a la interfaz de usuario.
  2. Hay que escribir mucho menos código.
  3. Dispones de módulos de interfaz de usuario para la mayoría de las situaciones habituales.

Si tu tema necesita ofrecer una pantalla de administración de ajustes personalizados estos son los requisitos:

  1. Debe ser un menú hijo del menú Apariencia, con el título de “Theme Options”.
  2. Se requiere el uso de la Settings API de WordPress.
  3. Todos los ajustes deben guardarse un “array” en serie.
  4. Los ajustes por defecto no deben insertarse en la base de datos hasta la instalación o una petición http.
  5. Todos los valores deben sanearse antes de guardarlos en la base de datos.
  6. Debe utilizarse la funcionalidad de la instalación estándar para cualquier necesidad de carga de archivos.

La mayoría de estos requisitos, si no todos, están en este Archivo de ejemplo de ajustes de temas para principiantes.

Miscelanea

  1. Deben usarse los “loops” completos en todas las plantillas. No es suficiente simplemente con llamar a the_post() en una plantilla cómo single.php o page.php.
  2. El $content_width global debe definirse correctamente.

wordpress-codex-themes

Guías de usabilidad

La Unidad de datos de prueba para temas de WordPress.org está repleta de entradas y páginas diseñadas para llevar tu tema a sus límites. Descarga los datos e impórtalos a tu servidor de pruebas. Probar tu tema con todos los tests disponibles te ayudará a asegurar que tu tema será lo suficientemente flexible para manejar una amplia variedad de datos reales de usuario.

Recursos

Traducción (algo libre pero precisa en lo vital) de Theme guide

El hack para arreglar el problema de las imágenes en el theme Pocket

Muchas veces es mejor retocar un poquito el código de un theme que instalar un plugin. Este sencillo hack es para extraer la imagen destacada (también denominada Post Thumbnail) y redimensionarla a gusto del consumidor.

Pocket, el theme minimalista y responsive que acabamos de implantar en Blogpocket, utiliza las imágenes featured como cabecera de cada post. Como sabes, en WordPress puedes asignar una imagen destacada a cada entrada a publicar. Los tamaños de dicha imagen se asignan por defecto en la página de configuración (Ajustes > Multimedia) del panel de administración. Pero esto supone un problema si se cambian dichos tamaños después de subir imágenes previamente o si se ha activado un theme que usa diferentes dimensiones.

Una solución, como se indica en la página de ayuda del Codex Function Reference/add image size, es aplicar un plugin para redimensionar imágenes ya subidas, como por ejemplo Regenerate Thumbnails, AJAX thumbnail rebuild o Simple Image Sizes.

Sin embargo, yo he preferido no cargar la instalación con más plugins y aplicar un pequeño hack al código del theme que consiste en extraer la url de la imagen destacada y mostrarla redimensionada utilizando el atributo width (ancho).

Más o menos, el código sería el siguiente:

1
2
3
4
5
6
7
<!-- grab the featured image -->
<?php if ( has_post_thumbnail() ) { ?>
   <?php $large_image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), 'large-image'); ?>
   <div style="text-align: center;">
   <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><img src="<?php echo $large_image_url[0]; ?>" alt="image large" width="600" /></a>
   </div>
<?php } ?>

La función has_post_thumnail detecta si existe una imagen featured, formalmente conocida como “Post Thumbnail”, asociada al post.

La función get_post_thumbnail_id extrae el ID de la imagen destacada.

La función wp_get_attachment_image_src devuelve un array con los atributos “url”, “width” y “height”, de una imagen anexada a un post. El primer elemento del array es la URL de la imagen, que es el que luego se redimensiona con “width=600″ en la etiqueta “img src”.

Te recomiendo que eches un vistazo a la información sobre imágenes featured en el Codex.

AVISO IMPORTANTE: Cambia la configuracion de tu suscripcion a Blogpocket en tu agregador poniendo el feed nativo http://www.blogpocket.com/feed, ya que el de FeedBurner lo usaremos, como maximo, hasta el proximo 1 de Julio de 2013.

Suscribete tambien a Blogpocket.com por e-mail.

Detecta el navegador en WordPress

navegadores

Hoy he encontrado algo que llevaba mucho tiempo buscando, algo que aunque no será de uso habitual para todo el mundo si que es de una utilidad enorme, monumental diría yo, y sobre todo de manera muy sencilla.

Me refiero a un modo muy fácil de detectar el navegador del visitante y actuar en consecuencia.

Todo esto lo ofrece – y más – el plugin llamado PHP Browser detection. Su instalación es como la de cualquier otro, pero su magia está en las tags de plantilla que ofrece, y eso ya te da una pista de que no es un plugin para cualquiera, sino orientado a desarrolladores, o como mucho a usuarios avanzados que estén familiarizados con los condicionales.

Lo que nos ofrece es todo esto … 

… Comprobación de navegadores específicos …

El parámetro $version es opcional claro. Incluye un número de versión mayor, un integrador simple – 3,4,5, etc … o déjalo vacio para comprobar cualquier versión.

<?php if ( is_safari($version) ) { haz esto }; ?>
<?php if ( is_firefox($version) ) { haz esto }; ?>
<?php if ( is_chrome($version) ) { haz esto }; ?>
<?php if ( is_opera($version) ) { haz esto }; ?>
<?php if ( is_IE($version) ) { haz esto }; ?>

… Comprobación de móviles, iPhone, iPad, iPod, etc …

<?php if ( is_iphone($version) ) { haz esto }; ?>
<?php if ( is_ipad($version) ) { haz esto }; ?>
<?php if ( is_ipod($version) ) { haz esto }; ?>
<?php if ( is_mobile() ) { haz esto }; ?>

… Comprobación de versiones específicas …

<?php if ( is_IE6() ) { haz esto }; ?>
<?php if ( is_IE7() ) { haz esto }; ?>
<?php if ( is_lt_IE6() ) { haz esto }; ?>
<?php if ( is_lt_IE7() ) { haz esto }; ?>
<?php if ( is_lt_IE8() ) { haz esto }; ?>

O, si lo prefieres, puedes obtener toda la información y hacer lo que quieras a partir de ahí:

… Obtener solo el nombre de navegador …

<?php $browserName = get_browser_name (); ?>

… Obtener el número de versión completo – 3.2, 5.0, etc …

<?php $browserVersion = get_browser_version (); ?>

… Obtenerlo todo en un array …

<?php $browserInfo = php_browser_info (); ?>

Cómo ves las posibilidades son inmensas. Puedes usarlo para usar CSS condicionales para Internet Explorer, mostrar contenido diferente según el navegador o la versión del mismo en cualquier parte de la web, o para alternar imágenes por vídeos en iPhones, lo que quieras.

¡Que lo disfrutes!, tienes para practicar y aprender un montón de cosas chulas.

5 soluciones que recomiendo para crear tu tienda online

Cada día de pasa el más que evidente que el comercio electrónico formará parte de nuestras vidas por mucho tiempo. ¿Quien no ha comprado alguna vez en Internet?. ¿Dónde quedo el miedo a dejar nuestros datos de tarjeta de crédito en la red?. Ahora si es el momento de crear tu propia tienda online. La crisis como una oportunidad para empezar un negocio con un coste relativamente bajo.

No voy a citar soluciones de comercio electrónico comerciales, que hay muchas y muy buenas, como modelo SaaS o para instalar en tu hosting web o servidores cloud. Me voy a centrar en soluciones de código abierto y cuyo coste de implantación puede ser desde 0 euros en adelante, según la ayuda que necesites. Todas las soluciones que recomiendo están basadas en servidores LAMP, vamos que necesitas PHP y MySQL.

5 opciones para crear tu propia tienda online

Prestashop

Es la plataforma de código abierto para crear una tienda online que más me gusta. Es gratis, potente y realmente veloz. Aunque tiene alguna pequeñas carencias esta disponible en más de 40 idiomas y miles de tiendas por medio mundo la utilizan. Es la que usamos en Color Vivo para nosotros y para clientes. Algunos ejemplos con PrestaShop con es Gourmet y Tienda de Jardinería. Además podéis comprar plantillas de diseño muy interesantes aquí.

Magento

Todos dicen que es mejor solución que PrestaShop, pero hoy yo las pongo al mismo nivel, si bien es cierto que Magento va por delante en algunos puntos como crear grandes tiendas online, pero también para acceder a toda su potencia hay que pagar, lo que le resta algo de atractivo. También podéis encontrar decenas de plantillas de diseño aquí.

OpenCart

Si no te gusta PrestaShop y menos entonces Magento, la solución es sin lugar a dudas OpenCart. Es mi segunda opción que ha evolucionado realmente rápido en los últimos meses. Realmente potente, con un panel de control muy sencillo, posibilidades sin límites. También hay muchas plantillas de diseño interesantes para utilizar.

WordPress

Si has leído bien. El popular gestor de contenidos se consolida como una solución de comercio electrónico. No solo puedes hacer páginas corporativas o blogs, desde hace ya tiempo también tu tienda online puede ser un WordPress. Solo tienes que darte un vuelta por las plantillas premium y ver las opciones para tiendas online con WordPress.

Oscommerce

El histórico Oscommerce ha perdido la batalla por el comercio electrónico a base de no evolucionar y actualizarse. Pero aun así sigue siendo el motor de miles de tiendas en todo el mundo, y sigue siendo una opción para muchos. Creo personalmente que si no lanza una actualizaciones novedosa finalmente acabará por morir lentamente. Estaremos pendientes de su versión 3.0 en desarrollo. También te recomiendo plantillas premium para oscommerce.

Y ahora ¿cuales son tus opciones para montar un comercio electrónico?. Participa en nuestra encuesta y déjanos tus comentarios.

Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.

 

5 soluciones que recomiendo para crear tu tienda online is a post from: Carrero

Una entrada original de Carrero.es.

La entrada 5 soluciones que recomiendo para crear tu tienda online aparece primero en Carrero.