Utiliza advanced custom fields para traducir wordpress

Dentro de wordpress tenemos bastantes plugins que nos permiten traducir el contenido, los slugs, los meta campos, etc. como por ejemplo, qtranslate, mqtranslate, WPLM y derivados.

Sin embargo, y de vez en cuando, el uso de estos plugins no es suficiente si utilizamos custom posts o custom fields en las entradas y páginas. Para ello, uno de mis alumnos, Toni Mora, se las ingenió utilizando una variable a través de advanced custom fields para mostrar el contenido en un idioma u otro de los campos personalizados, complementando los plugins de traducción.

<?php
$esp = get_field('empezamos');
$eng = get_field('empezamos-en');
_e("<!--:en-->$eng<!--:--><!--:es-->$esp<!--:-->");
?>

Gracias por el aporte, Toni!

Solución a títulos duplicados con qTranslate – WordPress SEO

Cuando utilizamos qTranslate (o sus variantes) y WordPress SEO by YOAST observamos que cuando google indexa los resultados de las páginas de nuestro wordpress escribe de modo seguido el título en todos los idiomas que tenemos activados, es decir, si tenemos activados inglés y castellano y nuestra página principal se llama Inicio en castellano y Home en inglés, en el título indexado pondrá InicioHome.

Una de las soluciones pasa por utilizar en header.php, dentro de la etiqueta <title> <?php wp_title(); ?> en lugar de <?php the_title(); ?>

Sin embargo, esto sólo arreglaría el problema del título pero, ¿qué hacemos cuando la descripción o las palabras clave también están duplicadas? La solución pasa por modificar el archivo functions.php y añadir una función nueva:

// qTranslate y WordPress SEO
function qtranslate_filter($text){
return __($text);
}

add_filter('wpseo_title', 'qtranslate_filter', 10, 1);
add_filter('wpseo_metadesc', 'qtranslate_filter', 10, 1);
add_filter('wpseo_metakey', 'qtranslate_filter', 10, 1);

Más info al respecto:

WordPress SEO y qTranslate

Utiliza los iconos de wordpress para tus custom posts. Dashicons

Al hilo del post en el que explicaba cómo cambiar la URL por defecto cuando creamos un custom post type en wordpress vengo ahora con un ejemplo de cómo poner el icono que nosotros queramos a ese custom post y que luego se verá en el panel, tal que así:

icono-custom-post-type

El caso es que tenemos dos opciones: hacerlo a través de una imagen, en png con transparencia a ser posible, en cuyo caso habría que emplear el código de esta manera dentro del archivo functions.php, en la parte donde definimos el custom_post_type:

'menu_icon' => get_template_directory_uri() . '/images/icono.png',
Si lo hacemos de esta manera tendríamos que guardar el icono dentro de la carpeta images del tema o sustituir la ruta por donde se encuentre la imagen.

En el segundo caso podemos añadirlo mediante la librería que utiliza wordpress para los iconos en el área de administración. Simplemente tenemos que entrar en la página de dashicons, elegir cual queremos y copiar la clase en vez de la ruta anterior de la foto:

'menu_icon' => dashicons-microphone',

DASHICONS

Todos los campos que hay que actualizar al migrar la base de datos en wordpress

Si después de terminar una web en localhost, subimos los archivos de wordpress y termina todo hecho un cristo, aquí va una guía rápida de las tablas que hay que reemplazar en la base de datos con una consulta SQL. Este método sólo hace referencia a las tablas que hay que reemplazar en una instalación de wordpress para sustituir una dirección local por la url definitiva.

UPDATE wp_options SET option_value = replace(option_value, 'http://servidordepruebas', 'http://nuevodominio') WHERE option_name = 'home' OR option_name = 'siteurl'; UPDATE wp_posts SET guid = replace(guid, 'http://servidordepruebas','http://nuevodominio'); UPDATE wp_posts SET post_content = replace(post_content, 'http://servidordepruebas', 'http://nuevodominio'); UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://servidordepruebas', 'http://nuevodominio');

Con captura de pantalla incluida.

Este código completa la manera simple de reemplazar texto en wordpress que comentaba en diciembre

Compatibilidad entre un tema nuevo y los plugins en wordpress

Crear un tema nuevo en wordpress es relativamente sencillo, basta con meter una carpeta nueva dentro de wp-content/themes junto con un style.css para indicar que esa carpeta es un tema.

Luego desarrollamos un footer.php y un header.php y, a partir de este momento, todas las páginas que vayamos creando los incorporarán con get_header(); y get_footer();

Sin embargo, cuando nos enfrascamos en la creación de un tema nuevo en wordpress, a veces se nos olvida que los plugins utilizan estas dos funciones predefinidas: wp_head y wp_footer y, si no las incluimos en ambos archivos, podemos encontrarnos con que los plugins no funcionarán correctamente.

Por lo tanto, para que los plugins puedan incluir tanto el CSS como el JS a nuestro nuevo tema debemos incluirlos, tal que así.

header.php

<?php wp_head(); ?>
</head>

footer.php

<?php wp_footer(); ?>
</body>
</html>

Cambiar el mail y el remitente por defecto en wordpress

Muchas veces hemos pensado en enviar una autorespuesta automática desde el formulario de contacto de wordpress por cada persona que se ponga en contacto con nosotros y, cuando lo hemos hecho, no aparecemos nosotros como remitente sino WordPress y, según cómo tengamos configurado el plugin o el sistema de envío de emails, el correo tampoco será el nuestro sino el del servidor o uno de wordpress por defecto.

Sin embargo, desde el archivo functions.php podemos configurar ambos parámetros, añadiéndolos tal que así:

function new_mail_from($old) { return 'email@dominio.com'; } 
function new_mail_from_name($old) { return 'Mi nombre'; }

El slug, el rewrite y el 404 not found en wordpress

Cuando desarrollamos un theme en wordpress a veces nos conviene crear un custom post type para distinguir el contenido de las entradas y ampliar la información a través del número de campos. Otras veces, simplemente, compramos un theme en wordpress que viene con un custom post predeterminado, el clásico portfolio, pero el uso que le queremos dar será distinto del viene predeterminado.

Uno de los pequeños inconvenientes es el nombre por defecto que introduce dentro de la URL cada custom post y que, normalmente, es lo que más nos molesta por temas de SEO o lógica en la estructura de los enlaces, para eso, desde functions.php existe la variable ‘rewrite’.

Simplemente hay que localizar dónde se registra el custom post y añadirle al final

'rewrite' => array('slug' => 'profesor'),

donde el slug es el término que identificará a la categoría del custom post o sustituirá a portfolio, según el caso.

Os dejo un ejemplo completo

add_action( 'init', 'create_post_type_profesores' );
function create_post_type_profesores() {
register_post_type( 'profesores',
array(
'labels' => array(
'name' => __( 'Profesorado' ),
'singular_name' => __( 'Profesor' ),
'singular_label' => __( 'profesor' ),
'all_items' => __('Profesorado'),
'add_new_item' => __('Añadir un profe nuevo'),
'add_new' => __('Nuevo profe'),
'edit_item' => __('Editar profesor')
),
'public' => true,
'has_archive' => true,
'capability_type' => 'post',
'hierarchical' => true,
'query_var' => true,
'menu_position' => 5,
'menu_icon' => get_stylesheet_directory_uri() . '/images/profesor_icon.png',
'rewrite' => array('slug' => 'profesor'),
'supports' => array('title','editor','thumbnail')
)
);

}
Hay que recordar que el nuevo nombre del slug no puede estar previamente en la página, si no, alterará el funcionamiento y mostrará error 404 en la página detalle de cada post con esa categoría.

Problema del checkbox de aceptar en Contact Form 7

Uno de los gestores de formularios más usados en wordpress es Contact Form 7. Es fácil de manejar y más configurable de lo que a primera vista parece.

Sin embargo, a pesar de trabajar con las últimas actualizaciones del plugin, todavía hay que incluir algo de código para solucionar el problema del típico checkbox de aceptación de la nota legal.

Hasta ahora, el comportamiento es que no ejecuta la validación de los inputs obligatorios del formulario hasta que no aceptas la casilla. Por tanto, no aparece ningún mensaje de error hasta que, efectivamente, marcas como activado el input, por lo que puede dar lugar a error.

Para resolverlo, hay que escribir:

acceptance_as_validation: on

Dentro de configuración adicional, justo aquí, y de esta manera:

acceptance-on

Cómo funcionan las imágenes destacadas en wordpress

WordPress viene con 3 tamaños predefinidos a la hora de guardar las imágenes, ese tamaño por defecto es configurable desde Ajustes > Medios. Son del más pequeño a más grande (thumbnail, medium y large).

imagenes-por-defecto-en-wordpress

A veces, según cómo maquetamos un theme en wordpress, necesitaremos añadir algunos tamaños. Para ello buscamos functions.php y añadimos la siguiente función según si queremos un tamaño fijo de alto y ancho o un tamaño variable en altura pero fijo en el ancho:

if ( function_exists( 'add_image_size' ) ) {
add_image_size( 'nombre1', 175, 9999 ); // fijamos el ancho - 175px - pero dejamos abierto el alto
add_image_size( 'nombre2', 220, 275, true); // le damos un tamaño fijo de 220x275px
}

Luego para llamar a cualquiera de los tamaños en el php (normalmente single.php) utilizamos la función the_post_thumbnail tal que así según queramos sacar una imagen u otra:

<?php the_post_thumbnail('thumbnail'); ?> // La imagen pequeña que fijamos en el panel
<?php the_post_thumbnail('medium'); ?> // La imagen mediana que fijamos en el panel
<?php the_post_thumbnail('large'); ?> // La imagen pequeña que fijamos en el panel
<?php the_post_thumbnail('nombre1'); ?> // La imagen que hemos definido en functions.php

Evidentemente esto funcionará para las nuevas imágenes que se suban desde el momento del cambio, si necesitáis que la modificación funcione para las imágenes ya subidas en wordpress habrá que regenerar los thumbnails con algún plugin como este:

Regenerador de imágenes

Tenéis más info sobre las variables que afectan a the_post_thumbnail en el codex de wordpress:

The_post_thumbnail en Codex

Cómo reemplazar texto rápidamente en wordpress accediendo a la base de datos

A veces la liamos parda migrando un wordpress de servidor y nos damos cuenta que, al hacerlo, nos hemos dejado por el camino todas las imágenes porque la ruta ya no es la misma.

Esto puede ocurrir si la instalación previa estaba dentro de una carpeta con nombre distinto y al hacerla de cero en otro servidor, has pensado para ti mismo, voy a cambiar el nombre de esa carpeta por… seguridad, porque ya existe esa carpeta o para trabajar en modo de pruebas… El caso es que para volver a ver las fotos necesitas acceder a phpMyAdmin y plantear una sencilla consulta en SQL (query):

UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://www.dominio.com/wp-content/uploads/', 'http://www.dominio.com/wp/wp-content/uploads/');

En este caso le decimos que en la tabla wp_posts, en la parte de contenido (post_content) reemplace una ruta por la otra… cambiando el nombre de la tabla o seleccionado toda la base de datos lo haría para todo lo que encuentre… os dejo una captura de dónde se hace si accedéis a phpMyAdmin por web.