Seguramente ya sabes que puedes desactivar los comentarios en WordPress por defecto o en cada entrada pero ¿y si quieres desactivarlos del todo, y todos a la vez?
Cierra todos los formularios de comentarios existentes
Quita los widgets relacionados con comentarios en el editor
Quita todos los enlaces a la gestión de comentarios de los menús de WordPress
Quita la columna de comentarios del Escritorio
Quita los ajustes de comentarios
Y no está mal.
Otra posibilidad es usar el plugin Disable comments, que permite desactivar los comentarios en todos los tipos de entrada o selectivamente, eligiendo en qué tipo de entrada se desactivan, una opción muy interesante.
Y, para los amantes de los deportes de riesgo o PHPMyAdmin, que viene a ser lo mismo, siempre puedes ejecutar los siguientes comandos SQL:
UPDATE wp_posts SET comment_status = 'closed', ping_status = 'closed' WHERE comment_status = 'open';
Que cierra los comentarios en todas las entradas donde estén abiertos. ¿Que quieres volver a activarlos?, pues entonces ejecutas este otro comando y los deja abiertos:
UPDATE wp_posts SET comment_status = 'open', ping_status ='open' WHERE comment_status = 'closed';
Así que, ¡venga, a cerrar comentarios!, las redes sociales te esperan. Eso si, luego no quieras que vuelvan a comentar en tu blog.
Uno de los modos más habituales de intento de hackeo que podemos sufrir en WordPress es el ataque por fuerza bruta, intentando acceder a nuestra administración de manera masiva.
Parece lógico, en consecuencia, limitar el acceso masivo, y para eso hay muchos plugins que permiten evitar accesos masivos o incluso bloquear el acceso durante un tiempo determinado.
Pero, teniendo en cuenta que este tipo de ataques suelen provenir siempre de los mismos países ¿no sería una buena estrategia limitar el acceso para que solo esté permitido a visitantes de ciertos países?
Además, esta utilidad no solo sería interesante para parar ataques, sino que puede formar parte de una estrategia comercial, en la que solo permitamos registrarse y acceder a nuestro sitio, habitualmente con ventajas para el usuario, a visitantes de países concretos.
En cualquiera de estos casos hay un plugin que nos ayudará de un modo genial, Limit login countries.
Su funcionamiento es muy sencillo, una vez instalado y activo nos ofrece una página de configuración en “Ajustes -> Login countries” donde bien añadiremos países a la lista blanca (Whitelist) o a la lista negra (Blacklist).
El concepto es que vamos a poder incluir (lista blanca) o excluir (lista negra) países, lo que mejor se adapte a nuestras necesidades. De este modo, si queremos defendernos de ataques, por ejemplo, haríamos una lista negra de países sospechosos y, para una estrategia comercial, haríamos una lista blanca de los países de procedencia de nuestros visitantes a los que queramos poder acceder. Es solo una idea de posibles usos.
Una vez decidamos si nuestra lista va a ser blanca o negra solo queda ir añadiendo países en el campo siguiente, donde usaremos el código de dos dígitos de los países a incluir en la lista.
Para terminar, tenemos que descargar la base de datos de geolocalización, para lo que tenemos un enlace directo. Una vez descargada hay que subir a la carpeta de carga de archivos de tu WordPress, normalmente “uploads“, de manera que lo detecte el plugin. El fichero que descargamos vendrá en formato comprimido, y hay que descomprimirlo y subir el archivo denominado GeoLiteCity.dat.
Si no lo detecta el plugin le diremos en el campo al efecto donde localizarlo.
Guardas los cambios y ya está, ahora solo podrán acceder a tu administración de WordPress los usuarios cuyos países no estén bloqueados (lista negra) o hayas permitido (lista blanca).
Si, por cualquier motivo, te equivocas y no puedes acceder tu mismo tiene fácil arreglo, añade la siguiente línea al fichero wp-config.php:
define('LIMIT_LOGIN_COUNTRIES_OVERRIDE', TRUE);
En resumidas cuentas, un sistema sencillo e inteligente para limitar el acceso a la administración de WordPress por países, el uso que se le dé ya es cosa tuya.
Hoy les voy a contar como se pueden instalar múltiples plugins de WordPress con tan solo unos clics. Y no solo eso, además podréis organizar los plugins en listas para así poder acceder a ellos más fácil y tener todo organizado.
Si alguno sigue páginas en Ingles como Tuts+ sabrá que estoy hablando de Wp Favs. Un plugin creado básicamente para instalar otros plugins de un modo sencillo y rápido. Que además junto con el sitio web se convierte en una herramienta indispensable para cualquier desarrollador que trabaje constantemente con WordPress.
El Plugin
Lo primero que hay que hacer es instalar el plugin en nuestro sitio. Para ellos vamos al repositorio de WordPress y descargamos la última versión.
Una vez instalado pueden ir a Herramientas -> Wp Favs y verán una pantalla como la siguiente:
Desde aquí tenemos dos opciones:
Registrarnos en el sitio web y usar el API Key para importar nuestras listas
Con cualquiera de las dos opciones que elijamos vamos a terminar obteniendo una lista de plugins ( conocida como Wp Fav) la cual nos mostrará el nombre de la misma, una pequeña descripción y la lista de plugins que tiene.
Si queremos seguir con esta lista, simplemente elegimos “Run this lists” que viene a ser como ejecutar esta lista.
Ahora obtendremos una nueva pantalla con todos los plugins disponibles donde podremos instalar uno por uno o seleccionarlos todos y usar el menu desplegable de “Acciones en lote” para instalarlos a todos de una vez.
En esta lista también podremos ver el estado del plugin ( Si ya esta instalado, activado, etc) y la versión del mismo dentro del Repositorio WordPress.
Una vez que hagas click en instalar el mecanismo es igual que si instalaras un plugin a la vez. Se descargarán desde el repositorio oficial de WordPress y se instalaran en tu sitio. Luego el status cambiara de “Not Installed” a “Inactive” (instalado pero no activado).
El sitio
El sitio web está en fase beta, y mi idea es agregarle más funciones en cuanto pueda. Como prioridad tengo mejorar la búsqueda y agregarle más opciones como por ejemplo “Eliminar plugins que no hayan sido actualizados el último año” o cosas por el estilo, añadir votaciones para las listas, etc. Pero ahora vamos a centrarnos en como crear una Wp Fav.
Lo primero que tienes que hacer es registrarte. Una vez registrado vas a recibir un email con tu usuario y contraseña como en cualquier otro sitio de WordPress. También podrás registrarte o hacer login con tu cuenta de WordPress.com.
Luego de hacer login por primera vez recibirás otro correo indicando tu nueva API Key para que puedas usarla luego con tu plugin.
Creando tu primera lista Wp Fav
¡Es hora de crear tu primera Wp Fav! Para ello ve a la sección “My Wp Favs” y haz click en el botón de “Create a Wp Fav”. Verás una pantalla como la siguiente:
En la lista esta de ejemplo estoy creando una lista privada para uno de mis clientes que siempre quiere instalar los mismos plugins. Entonces relleno el nombre y descripción y luego hago click en “private“. Esto significa que otros usuarios no podrán ver mi lista ni usar el quick use key de la misma.
Ahora que ya tenemos guardada la lista es hora de agregarle plugins. Para ello vamos a “Search Plugins” y escribimos el nombre del plugin que queremos.
Una vez que lo encuentras, haz click en el ícono con forma de corazón que aparece del lado derecho y luego click en el nombre de tu lista.
¡Y listo! Si vuelven al plugin e ingresan su API Key ya podrán instalar todos los plugin de sus listas.
Espero que les haya gustado, la idea de Wp Favs se me ocurrió para agilizar el proceso de instalación de plugins y cubrir algunos defectos que a mi entender el repositorio oficial tiene. Enseguida me di cuenta que si iba a hacerlo debía hacerlo para todos y por eso nació Wp Favs. Espero que lo encuentren tan útil como yo y si es así no se olviden de dejar algunas estrellitas en WordPress!
Crear una web para tu negocio o marca personal es una de las decisiones más importantes que debes tomar, por lo que la elección del desarrollador que lleve tu espacio en Internet a un nivel superior a la media debe ser exhaustiva y tomada con las precauciones debidas.
Hay estupendos desarrolladores de WordPress que pueden entregarte una web fantástica y única que luego tu podrás mantener y alimentar, una de las ventajas del uso de un gestor de contenidos (CMS) pero hay ciertos “mensajes” que debes saber identificar antes de contratar a un mal desarrollador que, en vez de hacer más sencilla la vida te la complique y tires el dinero a la basura.
Así que si detectas alguna de las siguientes situaciones, enciende todas las alarmas y empieza a buscar otro, los hay muchos y buenos.
:: Dominio, alojamiento y desarrollo todo incluido ::
Igual que no dejarías que el diseñador de tu tienda registrarse tu empresa y pagase por ti el alquiler del local no dejes que alguien que te hace un trabajo puntual – por relevante que sea – tenga las llaves de tu casa.
El dominio y alojamiento de tu web es como tu registro de la sociedad y la escritura de tu casa, que no esté a nombre de otro y, por supuesto, no le des las llaves maestras, como mucho una copia.
Si no sabes hacerlo busca alguien que te asesore o contrata con una empresa de alojamiento web de confianza, que te ayude en tus primeros pasos. El desarrollo y la gestión de alojamiento y dominios son negocios totalmente diferentes y separados, no deben mezclarse. Puede ser un valor añadido si se hace con total comprensión y consentimiento de lo que supone, en caso contrario es una trampa para el cliente.
:: Servicio de actualizaciones obligatorio ::
Salvo que sea decisión tuya no permitas que nadie te impida gestionar completamente tu web. Si no sabes haz un curso de WordPress.
Esto no significa que no puedas, o incluso debas, contratar a un buen webmaster que haga las comprobaciones debidas antes de actualizar plugins o incluso WordPress, lo importante es que nadie te impida tomar esa decisión y adquieras una dependencia tecnológica que te impida disfrutar de una de las virtudes de WordPress: administrar tu propia web.
No es nada malo, incluso es bueno, que una empresa o desarrollador te ofrezca el servicio de webmaster o mantenimiento mensual, pero no admitas que sea obligatorio.
:: Sin presupuesto estimado ::
Es bastante habitual que no se pueda dar un presupuesto exacto para un desarrollo web, pues hay muchas variables que ni siquiera el cliente tiene en cuenta a la hora de contratarlo, pero el desarrollador debe saber asesorarle de lo que conlleva y, sobre todo, ser capaz de facilitarle un presupuesto aproximado, o al menos un escandallo de lo que cuesta cada parte del proceso.
Huye de presupuestos por teléfono o estimaciones en conversaciones de café. Pide presupuesto por escrito que indique qué comprende cada parte del importe. Es una salvaguarda para ti y también para el desarrollador.
Si te ofrecen un tema a medida debes saber si está hecho desde cero o a partir de otro (algo totalmente lícito la mayoría de las veces), pero debes saber cuánto pagas por la licencia del tema, si la hubiese, y cuanto por el desarrollo. Lo mismo para los plugins o programación a medida.
Es bastante habitual, incluso recomendable, que se te quiera cobrar una parte antes de iniciar el desarrollo, no es nada malo ni raro, pero nunca pagues todo el trabajo al comienzo, deja siempre una parte sustancial para cuando la web esté terminada y tengas toda la documentación, llaves y claves.
:: Portfolio inexistente ::
Igual que no contratarías para hacer tu casa a alguien de quien no tienes referencias y hayas contrastado trabajos previos ni se te ocurra contratar a alguien que no te pueda demostrar y mostrar trabajos previos en los que evaluar sus capacidades y habilidades.
No vale con que te muestre capturas de webs, has de poder ver webs en directo y muestras del código desarrollado, con detalles de cada proyecto.
:: Sin respuestas ::
Cualquier desarrollador debe saber explicarte cada uno de los pasos y tareas que va a realizar y sus implicaciones en tu proyecto. No hay ninguna pregunta que le puedas hacer al respecto de tu web que no sepa contestarte con claridad qué significa, qué cualidades tiene, cómo implementarlo y por qué debes contemplarlo.
También debes hacer preguntas para las que haya una respuesta rápida, clara y demostrable.
No contrates a nadie que no sepa contestarte, por ejemplo, cuántos años lleva desarrollando WordPress, qué lenguajes de programación utiliza y por qué, qué va a hacer para que cumplas los estándares W3C y de WordPress, qué técnicas usará para posicionamiento o socialización de tu web.
:: Pocos métodos de comunicación ::
Ni se te ocurra contratar a alguien cuyo único método de contacto sea un formulario en su web o blog, no digamos su perfil en redes sociales. Debes disponer, al menos, de una dirección de correo electrónico y un teléfono o Skype. Lo contrario es la antesala del desastre.
No hay nada peor que quedarte sin comunicación con tu desarrollador a medias de un proyecto, es como sentirse totalmente náufrago y sin nadie a quien pedir ayuda.
:: Retraso en las comunicaciones ::
Un resultado típico de lo anterior es pasarse días sin poder contactar con tu desarrollador. Pero aunque tengas todos los métodos de contacto se te deben encender todas las alarmas cuando tarde más de dos días en contestar a un correo o llamada por tu parte en medio de un desarrollo.
Cualquier desarrollador puede tener una punta de trabajo pero eso no es excusa para no dar respuesta cumplida a un cliente al que se le está creando un sitio web. Si va a estar más de dos días incomunicado por cualquier motivo debe avisarte previamente, lo contrario es imperdonable.
:: Los misterios del SEO ::
Una parte fundamental de todo desarrollo web es el posicionamiento en buscadores. Tu web debe tener una estructura orientada al posicionamiento y tu, como cliente, debes saber claramente cómo se ha elaborado, en palabras sencillas y de manera fácilmente demostrable.
No dejes este asunto al azar, no admitas “guiños” del tipo “no te preocupes, nuestros clientes suben como la espuma en los buscadores porque usamos técnicas secretas que, entiende, no podemos desvelar”. Lo más normal es que te encuentres con sorpresas como que han utilizado técnicas de Black Hat SEO y, tras unas primeras semanas de crecimiento, tu web acabe bloqueada por los buscadores.
:: Documentación inexistente o insuficiente ::
Todo desarrollador serio debe entregar al cliente la documentación de su trabajo, con el código completo y configuraciones empleadas, además de los archivos de imagen y programación originales.
La idea es que si mañana quieres contratar a alguien más para mejorar o cambiar tu web puedas entregarle un dossier completo de cómo está hecha tu web actual.
Igualmente, el código debe estar documentado.
Así que no dejes a la intuición la creación de tu web, no solo por el dinero que te vas a gastar sino que debes aprovechar la oportunidad para aprender.
La elección de un mal desarrollador será algo que te dará muchos dolores de cabeza así que al menos ten en cuenta estos consejos, por supuesto basados en mi experiencia.
La gente de OnTheGoSystems, famosos por, por ejemplo, el maravilloso plugin WPML, me pasan una oferta de trabajo para desarrolladores expertos en WordPress para la que ofrecen empleo remoto.
Como veréis la oferta no es para cualquiera, pero es que no todos los trabajos son para cualquiera. Si cualificas ya sabes, contacta con ellos y nos cuentas.
El equipo de OnTheGoSystems es autor y responsable de muchos conocidos plugins para WordPress, como WPML, Toolset, Types, Views, CRED, Access entre otros. Sus plugins funcionan en cientos de miles de páginas web, probablemente en todos los idiomas de la Tierra.
En la actualidad, más de 500.000 sitios comerciales usan sus productos. Tu trabajo influirá en cientos de clientes en todo el mundo. Buscan un desarrollador experto en plugins para WordPress para que se una a su familia. Prometen retos, un trabajo interesante y un ambiente de trabajo inmejorable.
Requerimientos:
Graduado o Licenciado en Informática
+5 años de experiencia en desarrollo PHP
Sólida experiencia en desarrollo de plugins y temas para WordPress
Sólida experiencia en uso eficiente de MySQL
Buen nivel de inglés tanto hablado como escrito
Habilidad para liderar un proyecto complejo, incluyendo análisis previo y desarrollo
Si alguna vez has instalado WordPress Multisitio una de las opciones que te permite la administración de la red es poder limitar los nombres con los que se pueden registrar los nuevos usuarios. Desafortunadamente esta utilidad no está disponible si no activas la red de sitios WordPress.
Y no es ninguna tontería, pues restringir los nombres y alias de usuario puede impedir equívocos que podrían meterte en algún lío. Solo imagina alguien que se ha registrado con el nombre de usuario admin o webmaster o incluso con tu nombre, y contesta en los comentarios como si fuera tu. Hasta que lo descubras y lo elimines fulminantemente puede meterte en algún pequeño jaleo.
En todos los casos siempre es bueno, en comunidades amplias, que no haya lugar a este tipo de posibles equívocos, evitando el uso de ciertos nombres de usuario.
Esto ha sido así desde años atrás, pues en los foros siempre se ha podido realizar esta limitación, un básico de la administración de comunidades.
Volviendo a WordPress, aunque por defecto no contemple esta posibilidad – salvo que actives Multisitio – es fácil añadirla, como siempre por varios caminos posibles.
:: Restringir nombres de usuario sin plugin ::
Si no quieres instalar ningún plugin puedes crear una función para evitar la creación de ciertos nombres de usuario, que deberás personalizar a tu gusto o necesidades.
Solo tienes que usar la siguiente base y adaptarla a lo que quieras sustituyendo los nombres de ejemplo por los que tu quieras restringir:
//Nombres de usuario prohibidos function sozot_validate_username($valid, $username) { $forbidden = array('admin', 'webmaster', 'Fernando', 'Tellado', 'Editor', 'Administrador', 'Dios', 'SuperAdmin', 'foro', 'foros', 'moderador', 'Hitler', 'Soy la polla', 'Super Administrador', 'bozo', 'Autor', 'Ayuda WordPress', 'http://ayudawp.com'); $pages = get_pages(); foreach ($pages as $page) { $forbidden[] = $page->post_name; } if(!$valid || is_user_logged_in() && current_user_can('create_users') ) return $valid; $username = strtolower($username); if ($valid && strpos( $username, ' ' ) !== false) $valid=false; if ($valid && in_array( $username, $forbidden )) $valid=false; if ($valid && strlen($username) < 5) $valid=false; return $valid; } add_filter('validate_username', 'sozot_validate_username', 10, 2); function sozot_registration_errors($errors) { if ( isset( $errors->errors['invalid_username'] ) ) $errors->errors['invalid_username'][0] = __( 'ERROR: Nombre de usuario no válido, elige otro.', 'sozot' ); return $errors; } add_filter('registration_errors', 'sozot_registration_errors');
Cuando un usuario se intente registrar con alguno de los nombres de usuario de la lista se le mostrará un mensaje de error y tendrá que elegir otro que no esté en la lista negra.
:: Restringir nombres de usuario y alias con plugin ::
El método anterior es efectivo pero ¿y si pudieses definir reglas más exhaustivas?.
Una vez activo te ofrece una pantalla de ajustes donde puedes especificar las restricciones que quieras aplicar:
Si los nombres de usuario pueden incluir espacios o no.
Longitud mínima y máxima para los nombres de usuario.
Nombres de usuario exactos que no se pueden usar.
Palabras que no pueden aparecer en los nombres de usuario, de modo que no puedan, por ejemplo, usar Fernando-Admin, para lo que añades en esta lista la palabra Admin de modo que cualquier nombre de usuario que la incluya no estará permitido.
Palabras obligatorias en el nombre de usuario. Justo lo contrario que lo anterior, para cuando quieras que todos los nombres de usuario lleven asociada una palabra, por ejemplo wordpress, de modo que no se permitiría un usuario llamado Pedro pero si uno llamado Pedro_wordpress.
Solo un par de cosas a tener en cuenta. Una es que, por supuesto, debes tener activado el registro de usuarios en “Ajustes -> Generales“, y otra que los cambios que realices no afectan ni a los usuarios ya existentes ni a los usuarios que cree un administrador, quien no tendrá restricción alguna para elegir nombres de usuario.
Siempre estamos con la discusión de cuál es el mejor plugin de SEO, que si el de Yoast porque tiene más cosas, que si el All in one SEO pack porque no falla nunca, que si Fernando está loco, que si meto las tags manualmente, etc. Pero ¿y si creas el tuyo propio?
Así que basta de debates estériles y discusiones inútiles de a ver quién la tiene más larga y manos a la obra a crear un plugin SEO básico que añada las descripciones meta y un título para Open Graph con su descripción a la cabecera de las publicaciones de WordPress.
De paso aprenderemos cómo crear cajas meta a medida, cómo sanear los datos facilitados por el usuario, cómo guardar los datos en una entrada o página y cómo recuperar los datos guardados, ahí es nada.
:: Creando la caja meta ::
Lo primero es decidir donde debe aparecer la caja meta.
En nuestro plugin la caja meta se añadirá en la pantalla de edición de entradas y páginas. Para hacer esto se crea una función que contenga una variable que almacene un array que indique donde mostrar la caja meta y luego un loopforeach que devuelva el array y añada la caja meta a la pantalla elegida usando la función add_meta_box.
Finalmente se conecta la función con la acción add_meta_boxes.
function tes_mb_create() { /** * @array $screens Pantalla en la que se mostrará la caja meta * @values post, page, dashboard, link, attachment, custom_post_type */ $screens = array( 'post', 'page' ); foreach ( $screens as $screen ) { add_meta_box( 'tes-meta', 'Ajustes SEO ayudaWP', 'tes_mb_function', $screen, 'normal', 'high' ); } } add_action( 'add_meta_boxes', 'tes_mb_create' );
Si lo prefieres, también podrías añadir una función add_meta_box doble para incluir la caja meta tanto en la pantalla de edición de entradas como en la de páginas, algo así:
function tes_mb_create() { add_meta_box( 'tes-meta', 'Ajustes SEO ayudaWP', 'tes_mb_function', 'post', 'normal', 'high' ); add_meta_box( 'tes-meta', 'Ajustes SEO ayudaWP', 'tes_mb_function', 'page', 'normal', 'high' ); } add_action('add_meta_boxes', 'tes_mb_create');
:: Código de las cajas meta ::
En el código anterior, la función callback que imprime el HTML en la pantalla del editor es la denominada tes_mb_function, que es el tercer argumento de la función add_meta_box.
En nuestro plugin solo estamos programando dos campos de formulario HTML con los que gestionar los datos de title y description.
function tes_mb_function($post) { //si existen se recuperan los valores de los metadatos $tes_meta_title = get_post_meta( $post->ID, '_tes_meta_title', true ); $tes_meta_description = get_post_meta( $post->ID, '_tes_meta_description', true ); // Se añade un campo nonce para probarlo más adelante cuando validemos wp_nonce_field( 'tes_inner_custom_box', 'tes_inner_custom_box_nonce' ); echo '<div style="margin: 10px 100px; text-align: center"> <table> <tr> <td><strong>Etiqueta "title":</strong></td><td> <input style="padding: 6px 4px; width: 300px" type="text" name="tes_meta_title" value="' . esc_attr($tes_meta_title) . '" /> </td> </tr> <tr> <td><strong>Meta "description":</strong></td><td> <textarea rows="3" cols="50" name="tes_meta_description">' . esc_attr($tes_meta_description) . '</textarea></td> </tr> </table> </div>'; }
La explicación del código tes_mb_function anterior es la siguiente:
Recupera y almacena los valores de meta datos en una variable solo si esta existe. Se hace así para completar los campos con sus valores cuando estén presentes en la base de datos.
Se añade un nonce para que podamos probarlo más tarde, durante la verificación que ocurre antes de que los datos insertados en los campos de formulario se guarden en la base de datos.
El formulario HTML consistente de un campo de texto de introducción de datos y un área de texto donde capturar el título etiqueta description hace echo y se imprime.
Con solo esto ya deberías poder ver la caja meta en la pantalla de edición de entradas y páginas.
:: Guardando los datos de la caja meta ::
Una caja meta no estará completa hasta que pueda guardar los datos en la base de datos. El nombre de la función que gestiona el guardado de datos será tes_mb_save_data. El código sería este:
function tes_mb_save_data($post_id) { /* * Tenemos que verificar que esto proviene de nuestra pantalla y con la autorización adecuada, * para poder lanzar save_post en cualquier otro momento. */ // Comprobamos si se ha definido el nonce. if ( ! isset( $_POST['tes_inner_custom_box_nonce'] ) ) return $post_id; $nonce = $_POST['tes_inner_custom_box_nonce']; // Verificamos que el nonce es válido. if ( ! wp_verify_nonce( $nonce, 'tes_inner_custom_box' ) ) return $post_id; // Si es un autoguardado nuestro formulario no se enviará, ya que aún no queremos hacer nada. if ( defined( 'DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id; // Comprobamos los permisos de usuario. if ( 'page' == $_POST['post_type'] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( ! current_user_can( 'edit_post', $post_id ) ) return $post_id; } /* Vale, ya es seguro que guardemos los datos. */ // Si existen entradas antiguas las recuperamos $old_title = get_post_meta( $post_id, '_tes_meta_title', true ); $old_description = get_post_meta( $post_id, '_tes_meta_description', true ); // Saneamos lo introducido por el usuario. $title = sanitize_text_field( $_POST['tes_meta_title'] ); $description = sanitize_text_field( $_POST['tes_meta_description'] ); // Actualizamos el campo meta en la base de datos. update_post_meta( $post_id, '_tes_meta_title', $title, $old_title ); update_post_meta( $post_id, '_tes_meta_description', $description, $old_description ); } add_action( 'save_post', 'tes_mb_save_data' );
La explicación del código anterior es la siguiente:
Primero verificamos que proviene de nuestra pantalla y con la autorización adecuada, para poder lanzar en cualquier otro momento save_post y también verificamos que sea válido el nonce definido anteriormente en tes_mb_function.
A continuación, si ya existe una entrada en la base de datos la recuperamos y la guardamos en las variables $old_title y $old_description. Hacemos esto debido a que la función update_post_meta que se ocupa de guardar los datos en la base de datos en ocasiones requiere comprobar un valor anterior antes de actualizar la fila de la caja meta en la base de datos con los nuevos valores.
Después de esto saneamos los datos enviados usando la función de WordPress sanitize_text_field, que convierte HTML a su entidad, recorta todas las tags, borra saltos de línea, tabulados y espacios en blanco extras y recorta octetos.
Los datos meta se actualizan en la base de datos mediante update_post_meta.
Finalmente se conecta tes_mb_save_data con la acción save_post para guardar los datos de la caja meta cuando se actualice la entrada o página.
:: Utilizando los datos guardados ::
No olvides que los datos guardados se usarán para añadir el título y descripción de Open Graph y también para añadir la meta “description” a la cabecera de cada página.
Para lograrlo creamos la función denominada tes_mb_display, que contendrá las tags que queremos, para luego conectar con la acción wp_head.
function tes_mb_display() { global $post; // recuperamos los valores de los metadatos si existen $tes_meta_title = get_post_meta( $post->ID, '_tes_meta_title', true ); $tes_meta_description = get_post_meta( $post->ID, '_tes_meta_description', true ); echo ' <!-- Mi plugin SEO (author: http://ayudawp.com) --> <meta property="og:title" content="' . $tes_meta_title . '" /> <meta property="og:description" content="' . $tes_meta_description . '" /> <meta name="description" content="' . $tes_meta_description . '" /> <!-- /Mi plugin SEO --> '; } add_action( 'wp_head', 'tes_mb_display' );
¿Qué hemos hecho?
Para detectar correctamente el ID de la entrada recuperamos la referencia a la misma usando el objeto global $post.
A continuación se recuperan los datos meta de la base de datos y se guardan en las variables $tes_meta_title y $tes_meta_description respectivamente.
Luego definimos la gaga meta que debe insertarse en la cabecera de la plantilla.
Para finalizar conectamos la función con wp_head.
Si has escrito y guardado un título y descripción para una entrada o página al ver el código fuente de la misma podrás comprobar la presencia de las tags “title” y “description” para Open Graph y la meta “description” utilizada por los motores de búsqueda.
Al final, en muy pocos pasos, hemos creado un plugin SEO que añade etiquetas de título y descripción para Open Graph y la meta “description” a la cabecera de nuestras entradas y páginas.
El código completo del plugin sería algo así:
<?php /** * @package Plugin_SEO * @version 1.0 */ /* Plugin Name: Mi plugin SEO Plugin URI: http://ayudawp.com/ Description: Añade cajas meta para incluir metas "description" y "title" para Open Graph y buscadores. Author: Fernando Tellado Version: 1.0 Author URI: http://tellado.es */ function tes_mb_create() { /** * @array $screens Pantalla en la que se mostrará la caja meta * @values post, page, dashboard, link, attachment, custom_post_type */ $screens = array( 'post', 'page' ); foreach ( $screens as $screen ) { add_meta_box( 'tes-meta', 'Ajustes SEO ayudaWP', 'tes_mb_function', $screen, 'normal', 'high' ); } } add_action( 'add_meta_boxes', 'tes_mb_create' ); function tes_mb_function($post) { / /si existen se recuperan los valores de los metadatos $tes_meta_title = get_post_meta( $post->ID, '_tes_meta_title', true ); $tes_meta_description = get_post_meta( $post->ID, '_tes_meta_description', true ); // Se añade un campo nonce para probarlo más adelante cuando validemos wp_nonce_field( 'tes_inner_custom_box', 'tes_inner_custom_box_nonce' ); echo '<div style="margin: 10px 100px; text-align: center"> <table> <tr> <td><strong>Etiqueta "title":</strong></td><td> <input style="padding: 6px 4px; width: 300px" type="text" name="tes_meta_title" value="' . esc_attr($tes_meta_title) . '" /> </td> </tr> <tr> <td><strong>Meta "description":</strong></td><td> <textarea rows="3" cols="50" name="tes_meta_description">' . esc_attr($tes_meta_description) . '</textarea></td> </tr> </table> </div>'; } function tes_mb_save_data($post_id) { /* * Tenemos que verificar que esto proviene de nuestra pantalla y con la autorización adecuada, * para poder lanzar save_post en cualquier otro momento. */ // Comprobamos si se ha definido el nonce. if ( ! isset( $_POST['tes_inner_custom_box_nonce'] ) ) return $post_id; $nonce = $_POST['tes_inner_custom_box_nonce']; // Verificamos que el nonce es válido. if ( ! wp_verify_nonce( $nonce, 'tes_inner_custom_box' ) ) return $post_id; // Si es un autoguardado nuestro formulario no se enviará, ya que aún no queremos hacer nada. if ( defined( 'DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id; // Comprobamos los permisos de usuario. if ( 'page' == $_POST['post_type'] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( ! current_user_can( 'edit_post', $post_id ) ) return $post_id; } /* Vale, ya es seguro que guardemos los datos. */ // Si existen entradas antiguas las recuperamos $old_title = get_post_meta( $post_id, '_tes_meta_title', true ); $old_description = get_post_meta( $post_id, '_tes_meta_description', true ); // Saneamos lo introducido por el usuario. $title = sanitize_text_field( $_POST['tes_meta_title'] ); $description = sanitize_text_field( $_POST['tes_meta_description'] ); // Actualizamos el campo meta en la base de datos. update_post_meta( $post_id, '_tes_meta_title', $title, $old_title ); update_post_meta( $post_id, '_tes_meta_description', $description, $old_description ); } add_action( 'save_post', 'tes_mb_save_data' ); function tes_mb_display() { global $post; // recuperamos los valores de los metadatos si existen $tes_meta_title = get_post_meta( $post->ID, '_tes_meta_title', true ); $tes_meta_description = get_post_meta( $post->ID, '_tes_meta_description', true ); echo ' <!-- Mi plugin SEO (author: http://ayudawp.com) --> <meta property="og:title" content="' . $tes_meta_title . '" /> <meta property="og:description" content="' . $tes_meta_description . '" /> <meta name="description" content="' . $tes_meta_description . '" /> <!-- /Mi plugin SEO --> '; } add_action( 'wp_head', 'tes_mb_display' ); ?>
Si te animas puedes añadirle también, por ejemplo, la meta “keywords“, que también te agradecerán los buscadores.
Si quieres, en vez de copiar cada parte del código puedes descargarte el plugin a continuación:
El mito urbano cuenta que todos los atuendos de Albert Einstein eran exactamente iguales, de este modo, él no tenía que invertir tiempo cada día pensando en qué ponerse y en su lugar podía dedicar ese valioso tiempo a aquello en lo que era más bueno: “la física”.
Si lo que se dice es cierto, me parece que es una decisión bastante inteligente y podemos aplicarla al contexto del diseño web y a nuestros clientes.
Por lo general los dueños de sitios web son muy buenos en su labor: manejar su negocio, desarrollar productos y venderlos (o cualquiera sea su misión). Sin embargo, el montar y/o mantener un sitio web para su empresa es generalmente algo que esta fuera de su rango de experticia, algo en lo que debieran invertir el menor tiempo posible para centrarse en su negocio.
Gracias a WordPress esta tarea se vuelve bastante sencilla, pero algunos themes (generalmente los más populares) complejizan la experiencia de administración de tal forma que los dueños de sitios web terminan invirtiendo más tiempo del que deberían en configurar sus sitios.
Estos temas WordPress han mal acostumbrado a los clientes, difundiendo la idea de que mientras más opciones haya disponibles, el producto que se entrega es de mayor calidad.
Pero esto raramente es así.
Muchas opciones paralizan
Hace unas semanas, uno de mis clientes me pidió ayuda con un sitio web porque compró un tema muy bonito pero se le hizo difícil configurarlo, lo cual me pareció extraño siendo que se trata de alguien bastante inteligente y que se ha manejado bastante bien los otros sitios que hemos realizado.
Pero al momento de acceder al administrador, me encuentro con esto:
Como puedes apreciar el menú de administración había añadido algunos elementos extra (Page sections, Slides y Revolution Slider), pero lo más importante es que se añadía una pantalla extra con opciones del tema que a su vez incluía 11 pantallas con opciones configurables.
Sí, leíste bien: ¡11 pantallas!
Hace unos días Fernando hablaba de “los temas hinchados“, y la verdad es que en esta ocasión me enfrentaba a uno de ellos.
¿Decisiones u opciones?
Las mejores decisiones se toman cuando hay menos opciones disponibles, así que hay que hacer todo lo posible para que esta condición se cumpla. Para ello se usa un modelo de filtrado tipo embudo.
Por ejemplo, si necesito comprar calzado debo decidir si quiero zapatos o zapatillas, eso reduce mis opciones a la mitad. Luego debo decidir si quiero los zapatos formales o informales, mis opciones vuelven a reducirse. Luego establezco cual es el rango de precio que estoy dispuesto a pagar, menos opciones y finalmente elijo un lugar en el cual buscar los zapatos (el centro comercial de mi ciudad por ejemplo). De este modo mis opciones son acotadas y puedo tomar una mejor decisión.
Lamentablemente este ejercicio no aplica cuando este tipo de temas entran en juego.
El modelo de pensamiento del cliente/comprador es más o menos el siguiente:
Necesito un sitio web
Lo quiero en WordPress
Quiero usar un tema pre-diseñado
Lo compraré en ThemeForest
Buscaré en la sección ‘corporate’ (corporativo o institucional)
Con este razonamiento las opciones se reducen considerablemente y puede con tranquilidad tomar una opción.
Sin embargo, luego de elegir e instalar el tema, pensando que su proceso de toma de decisiones había acabado, se encuentra con este tema que lo hace entrar nuevamente en un proceso complejo de toma de decisiones, aunque en esta ocasión, en lugar de decidir por su propia cuenta, está optando por diferentes alternativas, varias de las cuales no tiene idea lo que significan.
No hay necesidad de hacer que las personas pasen por este proceso frustrante.
Si ya tomaron sus decisiones, hasta llegar a comprar un tema, lo ideal es que el paso siguiente sea tan simple como instalar, ajustar los colores, subir su logo y comenzar a publicar.
Sitios para clientes
Mi trabajo día a día es diseñar y desarrollar sitios web para clientes (por supuesto usando WordPress como base) y algo que ellos agradecen mucho es que los sitios tienen algunas opciones de diseño configurables: el logo de la cabecera, el texto de copyright, los enlaces a las redes sociales, etc.
Por supuesto son solo un par de opciones de modo que si deciden modificar alguna de ellas, no les tome más que un par de minutos.
No se trata de ofrecer opciones trascendentales que les permitan cambiar por completo la apariencia del sitio porque esa es una decisión que ya tomaron al momento de aprobar el diseño, se trata en cambio, de poner a su disposición las herramientas suficientes para tener el control sobre sus sitios.
Otro elemento que sin duda es un factor relevante para mis clientes es la simplificación que suelo realizar al área de administración para hacer más amable la tarea de mantener sus sitios.
Por ejemplo, el menú “Entradas” suele ser confuso para los clientes, es por eso que en muchos casos opto por cambiar este término por “Noticias“, lo cual es mucho más fácil de entender.
Dependiendo del sitio y del cliente, a veces elimino algunos widgets del dashboard y los reemplazo por otros que sean personalizados para darles la bienvenida a su sitio, además, les enseño a entrar a editar su contenido con un usuario del tipo editor y entrar como administrador sólo para gestionar plugins, menus y actualizaciones, de tal forma que no se distraigan con otras opciones que no son relevantes al momento de redactar una página.
Hace un tiempo publiqué un tutorial en mi sitio acerca de cómo mejorar la experiencia de administración, si quieres puedes revisarlo, y seguir los pasos que allí se indican.
Recientemente he lanzado un curso llamado “Creación de temas WordPress profesionales” en el cual se enseña todo lo relativo a la creación de temas WordPress, y la versión estándar del curso contempla además el acceso a un módulo completo sobre la personalización del área de administración de WordPress.
EL precio del curso parte desde los USD $99 en su versión básica, sin embargo, como fanático de este sitio, estoy regalando un 30% de descuento para los lectores de Ayuda WordPress.
Si es que te interesa, sólo debes usar el cupón “ayudawp” al momento de realizar la compra.
PD: Esta es una promoción exclusiva del autor de este artículo en la que Ayuda WordPress no participa directamente ni obtiene beneficio alguno. Toda la responsabilidad corre del autor y promotor de la misma.