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!

Cómo cambiar email del remitente en wordpress

Cuando usamos wordpress, y dejamos abierta la posibilidad de registrarse en nuestra web, el usuario recibe un correo donde aparece WordPress como nombre y el correo emisor es el del administrador, esto lo podemos cambiar desde el archivo functions.php del tema simplemente añadiendo estas líneas y modificando el email y el remitente:

function new_mail_from($old) {
return 'info@dominio.com';
}
function new_mail_from_name($old) {
return 'Nombre Remitente';
}

A veces también es útil cambiarlo cuando utilizamos y activamos un plugin o función de wordpress que utilice phpmailer para enviar una confirmación de mensaje recibido o para cualquier otro uso donde queramos evitar que el usuario vea que el correo se manda desde el propio wordpress.

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

Personaliza select con CSS3

Hasta hace poco tiempo personalizar un select era bastante rollazo, y muchas veces imposible sin usar javascript, hoy en día han surgido alternativas a través de CSS3 que nos permiten dar la apariencia que queramos antes de clicar en la lista seleccionable desactivando las propiedades comunes de select (appearance) y añadiendo las nuestras tales como una imagen de fondo, en el caso más fácil, o a través de CSS3 darle apariencia nueva con background, shadow o transform , os pongo un ejemplo sencillo:

select {
-webkit-appearance: none;
-moz-appearance:none;
appearance:none;
background: #d9d9d9 url(images/bg-select.jpg) no-repeat right;
border: none;
padding: 10px;
margin: 0;
width: 100%;
-webkit-border-radius:0;
-moz-border-radius:0;
border-radius: 0;
}

Podéis encontrar más info sobre la personalización de selects aquí:
bavotasan leaverou

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