Seleccionar página
Importar una base de datos grande a un servidor con phpMyAdmin

Importar una base de datos grande a un servidor con phpMyAdmin

En este artículo conoceremos algunos métodos para importar una base de datos grande a un servidor con phpMyAdmin. Hablamos de importar a un servidor externo donde tienes alojada la web, si lo que necesitas es realizar una importación de base de datos grande en un servidor local, debes consultar el siguiente artículo: Importar base de datos grande en Servidor Local

Para seguir los pasos de este artículo, el hosting donde tienes alojada la web debe que trabajar con la herramienta phpMyAdmin para administrar la base de datos.

Logo de phpMyAdmin

Michael Keck, the phpMyAdmin Project

phpMyAdmin y la limitación de tamaño de archivo

La herramienta de importación de bases de datos de phpMyAdmin está limitada a archivos con un tamaño máximo. Este tamaño depende de la configuración del servidor que tengas contratado para tu web. Los servicios de hosting no nos permiten acceder a los archivos de configuración para modificar ese tamaño. Si intentamos subir una base de datos que exceda del tamaño límite, se producirá un error que nos impedirá importar la base de datos.

tamanio-maximo-base-de-datos

Vamos a conocer dos métodos que te permitirán importar una base de datos grande a un servidor con phpMyAdmin.

Método 1. Importar utilizando la carpeta tmp

La mayoría de los servidores que contratamos tienen incluida una carpeta tmp (archivos temporales), lo normal es encontrar esta carpeta colgando de la raíz de tus archivos web. En algunos hosting con varios proyectos alojados, por ejemplo un WP, un prestashop… podemos encontrar una carpeta tmp dentro de cada proyecto.

metodo-importar-base-de-datos-grande

Si no encuentras la carpeta /tmp dentro de tu servidor, debes consultar con la empresa de hosting donde tienes alojada tu web. No crees tú el directorio tmp, ya que la ubicación de la carpeta viene definida dentro del archivo de configuración php.ini y colocarla en mal lugar puede provocar errores.

Después de localizar la carpeta /tmp, debes subir el archivo de la base de datos comprimida dentro del directorio. Para ello puedes emplear algún programa FTP como Filezilla.

Por último en phpMyAdmin, en las opciones de importación selecciona «importar desde carpeta tmp» y selecciona el archivo de la base de datos comprimida.

Con algunos hosting este método puede no funcionar por varios motivos, uno que no tengas carpeta o directorio /tmp y otro motivo es que phpMyAdmin no tenga activada la opción de importar desde carpeta. Vamos a conocer otro método que te ayudará a importar una base de datos grande a un servidor con phpMyAdmin que no tiene directorio /tmp o no tiene opción de importar desde carpeta.

Método 2. Herramienta BigDump para importar bases de datos grandes

BigDump es un script PHP que puede ejecutarse en cualquier servidor web aunque tenga el tamaño archivo limitado, el tiempo de ejecución limitado y el modo seguro activado.

Paso 1. Descarga el script BigDump

Descarga el script en tu ordenador desde: https://www.ozerov.de/bigdump/ (es la web del autor del script Alexey Ozerov). El archivo que has descargado es un archivo comprimido. Necesitamos editar algunos parámetros del archivo para poder importar nuestra base de datos. Así que lo siguiente es descomprimir el archivo.

Paso 2. Editar el script BigDump

Después de descomprimir el archivo, abre el fichero bigdump.php que encontrarás dentro. Puedes abrirlo con cualquier editor de textos o un editor de código (NotePad++, BBedit…).

Primero vamos a editar los parámetros de la base de datos que queremos importar. Las líneas a editar son las siguientes:

// Database configuration

$db_server   = 'localhost';
$db_name     = '';
$db_username = '';
$db_password = ''; 

Debes añadir los siguientes datos: servidor de la base de datos, nombre de la base de datos, nombre de usuario y contraseña de la base de datos. Un ejemplo:

// Database configuration

$db_server   = 'rdbms.strato.de';
$db_name     = 'DBnl32145';
$db_username = 'Un132145';
$db_password = 'jhgtyklm';

*si estas trabajando con WP puedes encontrar estos datos en el archivo config.php

Ahora podemos editar algunos parámetros opcionales, como el nombre de archivo y las líneas de archivo. Debes localizar lo siguiente:

// OPTIONAL SETTINGS 

$filename           = '';     // Specify the dump filename to suppress the file selection dialog
$ajax               = true;   // AJAX mode: import will be done without refreshing the website
$linespersession    = 3000;   // Lines to be executed per one import session
$delaypersession    = 0;      // You can specify a sleep time in milliseconds after each session
                              // Works only if JavaScript is activated. Use to reduce server overrun

En $filename añadimos el nombre de nuestro archivo de base de datos comprimido, por ejemplo: $filename=’DBN132145.sql.gz’.

$linespersession; puedes aumentar este valor para asegurarte que en cada carga se ejecuta toda una consulta SQL, por ejemplo todas las filas de una tabla con más de 3000 filas. Puedes poner un valor mayor.

Estos datos son opcionales, si no quieres añadir el nombre del archivo de la base de datos a importar, durante la ejecución BigDump te da la posibilidad de seleccionar el archivo. Luego veremos las diferentes pantallas de inicio en los distintos supuestos; editando el nombre de archivo a importar y dejando vacío el parámetro nombre.

Paso 3. Subir BigDump al servidor

Con Filezilla u otro programa FTP vamos a subir bigdump.php a nuestro servidor. Lo mejor es subirlo dentro de una carpeta, puedes utilizar la carpeta /tmp u otra carpeta creada para este fin, por ejemplo creamos la carpeta /dump.

Dentro de la misma carpeta puedes subir el archivo de la base de datos con una de las siguientes extensiones: SQL, GZ o CSV. Este paso es opcional, si subes el archivo de base de datos dentro de la carpeta al ejecutar el script de bigdump es capaz de localizar el archivo y prepararlo para la importación. 

Es importante antes de subir el archivo de la base de datos, revisarlo y asegurarnos de que no contenga la sentencia CREATE DATABASE en el archivo, ya que puede provocar errores.

Paso 5. Ejecutar BigDump

Abre una ventana del navegador y escribe la url: URL DE TU SITIO/CARPETA/bigdump.php

URL de ejemplo: https//laprogramaciondehoy.com/tmp/bigdump.php

URL de ejemplo: https//laprogramaciondehoy.com/dump/bigdump.php

*recuerda, si has creado una carpeta con distinto nombre, sustituye tmp por el nombre de tu carpeta

En tu navegador se abrirá la siguiente pantalla. Ejemplo con la variable $filename=’DB3809986.sql.gz’.bigdump pantalla inicio

El siguiente paso es pulsar sobre «Start Import» para que se ejecute el script.

bigdump-start-import

Ya hemos mencionado en el Paso 2 que podíamos dejar los parámetros opcionales tipo nombre de archivo a importar VACÍOS. Si no pones el nombre de archivo pero subes la base de datos en la misma carpeta que bigdump.php el programa es capaz de encontrar el archivo si se llama igual que la base de datos y permite la importación directa. Además permite la opción de cargar cualquier archivo desde el ordenador.

bigdump-start-import-con-carga-de-archivos

La imagen anterior recoge el supuesto siguiente; en bigdump.php no había rellenado el parámetro $filename, en la carpeta donde he subido bigdump.php también he subido el archivo comprimido de la base de datos DB3809986.sql.gz.

Si dentro de la carpeta en la que has subido bigdump.php no hay ningún archivo de base de datos, la pantalla que encontrarás es la siguiente:

bigdump-carga-de-archivos

Una vez pulsemos sobre Iniciar la importación o subir el archivo seleccionado, debemos tener paciencia. El script puede tardar un tiempo en ejecutarse pero nos va informando en todo momento del proceso de importación.

Si la importación finaliza con éxito verás en la pantalla un mensaje en color verde:

Felicidades: Final del archivo alcanzo, asumiendo OK

También te avisa de que borres el archivo de volcado y el script de bigdump.

Paso 6. Borrar archivo BigDump

Es muy importante que al finalizar el proceso de importación borres los archivos que has subido a la carpeta. Con FTP abre la carpeta /tmp o /dump o la que hayas creado y borra todos los archivos: archivo de la base de datos, bigdump.php

Errores con BigDump

En la página web del autor encontrarás respuesta a errores y dudas sobre el uso de BigDump. También encontrarás emails para contacto y soporte. 

Espero que este artículo haya sido de ayuda. Si tienes cualquier duda puedes escribirme un comentario e intentaré solucionar tu problema. 

 

 

 

Failed to set referrer policy | W3 Cache error

Failed to set referrer policy | W3 Cache error

W3 total cache failed to set referrer policy

Si al inspeccionar tu sitio web con las herramientas de desarrollo de Google Chrome te encuentras el siguiente aviso de error:

Failed to set referrer policy: The value » is not one of ‘no-referrer’, ‘no-referrer-when-downgrade’, ‘origin’, ‘origin-when-cross-origin’, ‘same-origin’, ‘strict-origin’, ‘strict-origin-when-cross-origin’, or ‘unsafe-url’. The referrer policy has been left unchanged.

debes actualizar el plugin «W3 Cache error» o aplicar alguna de las soluciones que te propongo en este artículo.

Error política de referencia | W3 Total Caché

Vista error en herramientas de desarrollo de Chrome.

Antes de intentar solucionar el error: Failed to set referrer policy, te recomiendo que leas el artículo donde te explico que son las políticas de referencia. Es importante que apliques la solución que más te convenga según las necesidades de tu sitio.

LEER ARTÍCULO: Información sobre las Políticas de referencia

Soluciones: WordPress Failed to set referrer policy

W3 Total Caché, en alguna de sus versiones, al actualizarlo, marca la opción:  con valor «» (cadena vacía). Esto provoca un error, ya que el valor predeterminado debería ser «no referrer-when-downgrade» u otro valor, pero no la cadena vacía. 

Solución 1: Desmarcar  

Para desmarcar esta opción:

1.- vamos al menú de W3 Total Cache. Pulsamos sobre Caché del Navegador (browser cache).

W3 Total Cache

2.- Navega hasta la sección «Security Headers».

Security Headers W3 Total Cache

3.- Busca la opción «Referrer Policy» y desmárcala.

Referrer Policy W3 Total Cache

4.- Guarda todos los ajustes, limpia caché y vuelve a cargar tu página. Ya tienes solucionado el error.

Referrer Policy W3 Total Cache Save

Solución 2: Asignar una política de referencia

Como el error se produce por la directiva de seguridad que se aplica por defecto en el plugin, que es la cadena vacía «». Podemos dejar l marcada, y asignarle una directiva. Para que definas la directiva más apropiada a tu sitio, echa un vistazo al siguiente artículo: Qué Políticas de Referencia aplicar en mi sitio

Solución 3: Modificaciones en el archivo .htaccess

Esta última solución no es necesaria si has aplicado la «Solución 2″. El plugin W3 Total caché ya modifica el .htaccess con la directiva adecuada. En cualquier caso, para modificar el archivo .htaccess de tu sitio, escribe el siguiente código:

<IfModule mod_headers.c>
    Header set Referrer-Policy "origin"
</IfModule>

 

Aplicando cualquiera de las soluciones descritas en este tutorial conseguirás solucionar el error que provoca el plugin W3 Total Caché failed to set referrer policy.

 

 

 

 

Políticas de referencia web | Referrer policy

Políticas de referencia web | Referrer policy

¿Qué es una referencia?

En este tutorial conoceremos que son las referencias web, la información que transmiten y como podemos modificarla haciendo uso de las Políticas de referencia (Referrer policy).

Una referencia es la información de URL que transmite un enlace origen a otro destino. Esta información se puede transmitir mediante una cabecera HTTP, una etiqueta meta, un atributo dentro de la etiqueta de enlace <a>…

El funcionamiento es el siguiente: existe un enlace en un determinado sitio (URL origen), un usuario hace clic en el enlace, y navega hacia otra página dentro de la misma web o en otra diferente (URL destino). El navegador envía una cabecera HTTP a este servidor de destino con la URL absoluta o relativa del sitio que origino el enlace. 

información referrer cabecera HTTP

¿Cómo puedo ver la cabecera Referer de una página en Chrome?

Si quieres ver el referer en acción desde el navegador G. Chrome, sigue las siguientes indicaciones:

1.- Abre herramientas de desarrollo en Chrome.

2.- En el menú superior pulsa sobre Red (Network). 

ver cabecera referer en CHROME paso 1

3.- Selecciona filtrar por documentos.

ver cabecera referer en CHROME paso 2

4.- Selecciona la página, y pulsa sobre Header para ver las cabeceras. Ya tienes acceso a la información Referer.

ver cabecera referer en CHROME paso 3 y 4

Para que entiendas mejor este ejemplo: desde la página del blog de mi web: https://laprogramaciondehoy.com/bloglph/ (URL origen), he pulsado sobre el artículo: Como mejorar y optimizar la usabilidad de WooCommerce (URL destino https://laprogramaciondehoy.com/mejorar-y-optimizar-woocommerce/). He abierto las herramientas de desarrollo del Google Chrome y he seguido los pasos descritos. Observarás que puedo acceder a la información Referer donde me indica desde donde ha llegado el enlace.

Esta información puede ser útil, por ejemplo para realizar el seguimiento de campañas de publicidad, enlaces de otros… pero también puede ser peligrosa si no controlamos lo que enviamos mediante esta cabecera. Piensa que puedes enviar URLs de tu sitio internas, con privilegios… Esta información puede ser usada por terceros (mal intencionados) para modificar lo que ven tus usuarios o provocar distintos tipos de ataques.

Pues bien, las políticas de referencia se han creado para que controlemos y modifiquemos por seguridad la información que enviamos mediante Referer. Una política de referencia es una modificación que podemos realizar sobre el algoritmo utilizado cuando se crean las cabeceras «Referer».

Configuración de las Políticas de referencia en WordPress – Referrer policy

El editor de WordPress a partir de la versión 4.7.4 modifica todos los enlaces a: “noopenner noreferrer”. En concreto la directiva: «noreferrer», es una de las posibles políticas de referencia existentes. Esta política elimina las referencias y por tanto el problema de seguridad, intimidad… provocado por las cabeceras de referencia. 

Lista y explicación de las diferentes políticas de referencia existentes

Lista y explicación de las diferentes políticas de referencia existentes

Las políticas de referencia (referrer policy), son cadenas. Existe la cadena vacía «» que no corresponde a ninguna política de referencia. En este caso se aplicará la política de referencia definida en otra parte de nivel superior. Si no existe tampoco una política a nivel superior, por defecto aplica la política: «no-referrer-when-downgrade».

«no-referrer» (referrer policy no referer)

Es la más simple que existe (la que aplica el editor WordPress a partir de la versión 4.7.4). Si aplicas esta política de referencia en tus enlaces, se omite el encabezado por completo, y no envías ninguna información.

«no-referrer-when-downgrade» (referrer policy no referrer when downgrade)

En este caso solo se envía la URL de referencia cuando las solicitudes se realizan entre protocolos al mismo nivel de seguridad. Se aplica tanto a enlaces a sitios externos como a enlaces dentro de tu web.

Por ejemplo:

  1. desde un enlace HTTPS hacia otro enlace HTTPS, se envía información de referencia. (https://bloguno/noticias ⇒ https://blogdos/ejemplo)
  2. desde enlace HTTPS a enlace HTTP, no envía información de referencia. (https://bloguno/noticias ⇒ http://blogdos/ejemplo)
  3. desde enlace HTTP a enlace HTTP, se envía información de referencia. (http://bloguno/noticias ⇒ http://blogdos/ejemplo)

«same-origin» (referrer policy same origin)

Envía un encabezado de referencia si el enlace lleva a una URL que pertenece al mismo sitio y además el nivel de seguridad del protocolo es el mismo (ejemplo de HTTPS a HTTPS o de HTTP a HTTP en enlaces de navegación dentro de la misma web). 

Por ejemplo:

  1. desde un enlace HTTPS hacia otro enlace HTTPS de la misma web, se envía información de referencia. (https://bloguno/noticias ⇒ https://bloguno/ejemplo)
  2. desde un enlace HTTP hacia otro enlace HTTP de la misma web, se envía información de referencia. (http://bloguno/noticias ⇒ http://bloguno/ejemplo)
  3. desde enlace HTTP hacia otro enlace HTTP de distinta web, no envía información de referencia en ningún caso. (https://bloguno/noticias ⇒ https://blogdos/ejemplo)

«origin» (referrer policy origin)

Da lo mismo que el enlace se cree desde una web origen a la misma web o a otra web diferente, o que pase de un protocolo HTTPS a uno HTTP, que siempre va a enviar información. Eso sí, la única información que envía es la URL del nombre de dominio, no la URL completa. 

Por ejemplo:

  1. desde el enlace origen https://laprogramaciondehoy.com/bloglph a https://laprogramaciondehoy.com/mejorar-y-optimizar-woocommerce/, envía lo siguiente: https://laprogramaciondehoy.com

«strict-origin» (referrer policy strict origin)

La diferencia con la política de referencia anterior (origin) es que no envía la referencia si el enlace va a un protocolo con menor seguridad (ejemplo de HTTPS a HTTP). Es decir envía la URL de dominio cuando los enlaces están al mismo nivel de seguridad.

«origin-when-cross-origin» (referrer policy origin when cross origin)

En este caso la información URL que se envía en referrer es diferente si el enlace apunta al mismo dominio o a otro dominio. También es diferente si el enlace va a un protocolo con menos seguridad:

1.- Si el enlace se produce entre páginas del mismo dominio, se envía la URL completa. Ejemplo:

desde el enlace origen https://laprogramaciondehoy.com/bloglph a https://laprogramaciondehoy.com/mejorar-y-optimizar-woocommerce/ envía la URL: https://laprogramaciondehoy.com/mejorar-y-optimizar-woocommerce/

2.- Si el enlace se produce entre páginas de distinto dominio, envía la URL de dominio. Ejemplo:

desde el enlace https://laprogramaciondehoy.com/mejorar-y-optimizar-woocommerce/ a https://woocommerce.org, envía la URL de dominio origen: https://laprogramaciondehoy.com

3.- enlaces que apuntan a otros de menor seguridad, independientemente de si son internos o externos, envía la URL de dominio. Ejemplo:

desde https://laprogramaciondehoy.com/mejorar-y-optimizar-woocommerce/ a http://programar.es/trucos-woocommerce, envía la URL de dominio origen: https://laprogramaciondehoy.com

«strict-origin-when-cross-origin» (referrer policy strict origin when cross origin)

Funciona igual que la política de referencia anterior, salvo cuando el enlace destino es menos seguro, en ese caso no envía nada:

desde https://laprogramaciondehoy.com/mejorar-y-optimizar-woocommerce/ a http://programar.es/trucos-woocommerce, no envía información.

«unsafe-url» (referrer policy unsafe url)

Es la política de referencia menos segura. Envía la URL completa a cualquier destino sin los parámetros de la URL (por ejemplo: nombre de usuarios, cookies o información sensible).

Cómo puedes modificar las políticas de referencia – Configurar Referrer policy

Etiqueta <meta>

Puedes añadir una etiqueta meta en la cabecera de tu sitio.

<meta name="referrer" content="origin-when-cross-origin">

En WordPress, puedes añadir el código en el archivo header.php de tu tema.

Esta etiqueta meta, también se puede crear con código JavaScript:

var meta = document.createElement('meta');
meta.name = "referrer";
meta.content = "no-referrer";
document.getElementsByTagName('head')[0].appendChild(meta);

Fuente código JavaScript: https://stackoverflow.com/questions/6817595/remove-http-referer

Etiqueta <a>

Podemos especificar en cada atributo la política de referencia que debe seguir cada enlace concreto:

<a href="http://example.com" referrerpolicy="origin">

para los enlaces que se abren en distinta ventana del navegador, es decir, que tienen configurado el atributo target=»_blank», existe una referencia. Puedes configurarlo:

<a target="_blank" rel="noopener noreferrer" href="https://otraweb.es">

Más información sobre este tipo de enlaces en: https://ayudawp.com/la-vulnerabilidad-target_blank-la-solucion-relnoopener-noreferrer-wordpress/

En el servidor

Otra manera de establecer las políticas de referencia es desde el propio servidor web. 

Más información: https://www.blackhillsinfosec.com/fix-missing-referrer-policy-website/

Comprobar las Referrer policy de cualquier web

Para ver las Políticas de referencia (Referrer policy) que utiliza cualquier web, puedes emplear la herramienta https://securityheaders.com/

El uso de la herramienta es muy sencillo, introducimos el dominio que queremos analizar y pulsamos sobre «Scan»

Security Headers

La herramienta te ofrece un informe completo del uso y seguridad de las cabeceras de tu sitio.

Failed to set referrer policy the value is not one of noreferrer

En el siguiente artículo hablaremos de como solucionar el error:

«failed to set referrer policy the value is not one of noreferrer»

 

 

Cómo quitar los enlaces de imágenes de WordPress

Cómo quitar los enlaces de imágenes de WordPress

¿Por qué quitar los enlaces de imágenes en WordPress?

En la configuración por defecto de WordPress, cada vez que subimos una imagen a medios, se crea un vínculo al archivo multimedia. Este comportamiento de WP genera algunos problemas:

  • Empeora la experiencia de usuario: cuando el usuario pulsa en la imagen dentro del post, la web se redirige a otra URL (enlace al archivo multimedia), el usuario pierde la navegación y tiene que pulsar hacia atrás si quiere regresar a la entrada y seguir leyendo el post.
  • Afecta negativamente al SEO: estos links de archivos multimedia pueden aparecer en las búsquedas, es preferible que aparezcan las páginas de contenidos y no estás. También aparecen en las visitas a páginas de Analytics con tiempo 0s. y normalmente con alta tasa de rebote.

Voy a explicar diferentes maneras para eliminar los enlaces de las imágenes. Las soluciones que vamos a ver, no eliminan los enlaces de las imágenes que ya estén insertadas en tus post, solo van a modificar el comportamiento por defecto de WP cuando subas nuevas imágenes a la librería de medios.

Cómo eliminar los enlaces de imágenes WordPress

Voy a aportar varias soluciones, te aconsejo que leas primero cada una de ellas antes de decidir cual vas a implementar. 

Quitar los enlaces de imágenes añadiendo un script a nuestro archivo functions

Abre el archivo functions.php de tu tema y añade las siguientes líneas de código:

function wpb_imagelink_setup() {
  $image_set = get_option( 'image_default_link_type' );
 
  if ($image_set !== 'none') {
    update_option('image_default_link_type', 'none');
  }
}
add_action('admin_init', 'wpb_imagelink_setup', 10);?>

Explicación del código: recogemos el valor de «image_default_link_type» que se encuentra almacenado en la tabla wp_options de nuestro WP. Si este valor es distinto de «none», entonces modificamos el valor a «none». Es como modificar ajustes de visualización de adjuntos, enlazado a ninguna.

Ajustes de visualización de archivos en WP

Quitar los enlaces de imágenes desde el administrador de WordPress

Dentro del administrador, hay una página oculta, que permite cambiar toda la configuración de tu sitio WordPress. Puedes acceder a esta página, escribe la siguiente URL, en tu administrador: tuurl.com/wp-admin/options.php

Si ya has accedido, verás una nueva página, desde la que puedes modificar y configurar todas las opciones de tu sitio. Para cambiar el funcionamiento de enlaces de las imágenes debes buscar: image_default_link_type.

image_default_link_type puede tener los siguientes valores:

  • file: enlace al archivo multimedia de la imagen.
  • post: enlace a la entrada cuando la imagen se inserta en un post.
  • attachment: enlace a la página del archivo adjunto.
  • none (o dejarlo vacío): no se crea ningún enlace.

Revisa que valor tienes en image_default_link_type, si es distinto de none, cambia el valor a none o deja el campo vacío.

Otras opciones para evitar links de archivos multimedia

Puedes encontrar algunos plugins que realizan estos cambios. Sinceramente, la solución es tan sencilla que emplear plugins me parece una carga innecesaria en la página. 

También puedes cambiar el comportamiento por defecto cuando subas la próxima imagen. Carga una nueva imagen >> cuando termine de subir, selecciona en la caja:

Quitar enlaces de imágenes de WordPress

WordPress recuerda el último ajuste realizado, es decir, la próxima vez que subas un nuevo medio no se creará enlace.


Ya  hemos terminado por hoy, hay algunos post en mi blog, sobre imágenes y optimización que te pueden interesar:

Eliminar imágenes no utilizadas en WordPress

Exportar entradas sin perder imágenes destacadas en WordPress

 

 

 

Polylang asociar páginas existentes de distintos idiomas

Polylang asociar páginas existentes de distintos idiomas

Polylang asociar páginas existentes: referenciar las páginas de distintos idiomas

Vamos a crear correctamente en Polylang los vínculos entre páginas y entradas de distintos idiomas. Explicaré como asociar páginas existentes o ya creadas en los distintos idiomas. El objetivo es conseguir que todas nuestras entradas y páginas que tengan una traducción en otro idioma estén correctamente unidas. La imagen siguiente puede ayudar a comprender mejor la finalidad del artículo: «Polylang asociar páginas existentes».

Polylang vincular páginas existentes

En la imagen anterior podemos ver una página o entrada que está correctamente vinculada a las páginas de traducciones en los distintos idiomas de la web.

Polylang unir páginas de distintos idiomas

Por el contrario, en esta imagen, podemos observar distintas páginas que no tienen asociada su correspondiente traducción.

Esta situación crea problemas cuando un usuario cambia de idioma en páginas que no están correctamente asociadas.

Cómo asociar correctamente las páginas en los distintos idiomas

Paso unoPrimero, pulsamos en editar sobre una de las páginas, es indiferente que selecciones la página de un idioma u otro. Para este ejemplo suponemos que tenemos dos páginas creadas, una en inglés y otra en castellano. El título de la página en inglés es: «About me». El título de la página es español es: «Sobre mí».

 

Paso dosDespués, dentro de la ventana de edición, buscamos la herramienta de administración de «Idiomas». Suele aparecer arriba a la derecha. Según la imagen, estamos dentro de la ventana de edición de la página: «Sobre mí»

Polylang herramienta gestión idiomas

Paso tresOJO; no pulsar sobre el signo +. Debemos situar el cursor en la caja de búsqueda correspondiente al idioma que queremos unir o asociar. Escribimos el título o parte del mismo dentro del input.  Polylang nos mostrará las páginas no asociadas de inglés que tengan alguna coincidencia con el título.

Ejemplo de vincular páginas en Polylang

Paso cuatroPara finalizar, seleccionamos el título del desplegable y actualizamos la página.

 

 

Eso es todo, ya has logrado con Polylang asociar páginas existentes en los distintos idiomas. Debes hacer esto para todas tus páginas o entradas con traducción. 

 

 

 

Insertar publicidad dentro del contenido de un post en WordPress

Insertar publicidad dentro del contenido de un post en WordPress

Insertar publicidad propia o de afiliados dentro del contenido de un post

En este nuevo post aprenderás a insertar publicidad dentro del contenido de las entradas y páginas de WordPress. Te explicaré dos maneras diferentes para lograr colocar, imágenes, banners de afiliados… dentro de tu contenido. Obviamente estamos hablando de insertar contenido dinámico de manera automática en todas las páginas, entradas… 

Seguramente te has fijado en más de una página web que tiene anuncios dentro del contenido de sus entradas y/o páginas. Probablemente si estás leyendo esta entrada es porque te preguntas cómo puedes insertar publicidad dentro del contenido de tus artículos:

  1. ¿Tienes que ir entrada por entrada editando el contenido? La respuesta es un NO rotundo, sería ineficiente lo mires como lo mires. 
  2. ¿Tienes que recurrir a plataformas de terceros? Si tu objetivo es insertar unos pocos anuncios de afiliados o similares, publicidad de unas pocas empresas, productos recomendados… este post es para ti. En caso contrario, si lo que quieres es rentabilizar tu blog con publicidad de múltiples empresas y productos, te conviene recurrir a los servicios de algunas redes publicitarias o agencias publicitarias online. Si este es tu objetivo te recomiendo el siguiente artículo de www.dineropornavegar.es, donde analizan 20 empresas de publicidad online.

Insertar publicidad dentro del contenido de tus post insertando código en functions.php

Para insertar anuncios dentro del contenido, vamos a crear un código que copiaremos dentro de nuestro archivo functions.php del tema. En este ejemplo insertaremos publicidad dentro del contenido de las entradas de nuestro blog. A lo largo de este tutorial encontrarás modificaciones del código que te ayudarán a insertar banners de publicidad dentro del contenido de páginas, post, post según categoría, entradas personalizadas…

Abre tu archivo functions.php. La ruta del archivo es la siguiente: wp-content/themes/tutema/functions.php

Recuerda que si no quieres perder los cambios realizados en tu página después de una instalación es recomendable crear tu propio plugin o trabajar con un tema hijo.

 Copia y pega el siguiente código:

//insertar anuncios dentro del contenido
 
add_filter( 'the_content', 'insertar_anuncios_contenido_post' );
 
function insertar_anuncios_contenido_post( $content ) {
     
    $contenido_ad = '<div>El contenido del anuncio</div>';
 
    if ( is_single() && ! is_admin() ) {
        return insertar_despues_del_parrafo( $contenido_ad, 2, $content );
    }
     
    return $content;
}
  
//buscando el lugar dentro del contenido
  
function insertar_despues_del_parrafo( $insertion, $paragraph_id, $content ) {
    $closing_p = '</p>';
    $paragraphs = explode( $closing_p, $content );
    foreach ($paragraphs as $index => $paragraph) {
 
        if ( trim( $paragraph ) ) {
            $paragraphs[$index] .= $closing_p;
        }
 
        if ( $paragraph_id == $index + 1 ) {
            $paragraphs[$index] .= $insertion;
        }
    }
     
    return implode( '', $paragraphs );
}

Para tener tu código funcionando, debes sustituir: ‘<div>El contenido del anuncio</div>’ por el contenido de tu anuncio, por ejemplo:

<a href="//es.123rf.com/#nereal">
<img src="//es.123rf.com/submit/staticbanners/250X250_photo.jpg" alt="Stock Photos from 123RF" border="0" width="250" valign="top" height="250">
</a>

*el ejemplo anterior muestra como insertar un banner de afiliado con enlace e imagen. El código original mostrado en este apartado es de la web WpBeginner. 

Explicando el código que inserta anuncios dentro del contenido

Vamos a explicar el código completo para que tengas control total sobre las funciones. Si entiendes bien estas funciones, serás capaz de realizar cambios y adaptar el código a tus necesidades.

1.- Filtro
add_filter( 'the_content', 'insertar_anuncios_contenido_post' );

Cómo nuestro objetivo es modificar el contenido de nuestros post o páginas, lo primero que hacemos es utilizar el filtro: «the_content». Este filtro actúa después de extraer el contenido de la base de datos y antes de imprimirlo en pantalla. El funcionamiento es el siguiente:

  1. Consulta a la base de datos y trae el contenido.
  2. Si hay un filtro que afecte al contenido, ejecutar el  filtro => en nuestro caso, ejecutar la función: insertar_anuncios_contenido_post
  3. Mostrar el resultado por pantalla

2.- Función crear anuncio
function insertar_anuncios_contenido_post( $content ) {

Declaramos la función principal que devuelve el contenido del post modificado. Si observas verás que a la función le pasamos un parámetro «$content». Realmente es el filtro anterior quién se encarga al llamar a la función de enviar el contenido del post. 


 $contenido_ad = '<div>El contenido del anuncio</div>';

Creamos una variable: «$contenido_ad». Su función es almacenar el contenido de nuestro anuncio; textos, enlaces, imágenes… Debes modificar este contenido para que se adapte a tus anuncios.


if ( is_single() && ! is_admin() ) {

Fíjate bien en esta línea del código, es la que permite que las entradas únicamente se muestren en las páginas individuales de nuestro blog. Para conseguir esto utilizamos la función is_single(), que comprueba si un post individual se está mostrando. is_single() es booleana, es decir devuelve true o false. También utilizamos la función is_admin() que controla si estamos viendo la entrada dentro del administrador de WP. Esta función devuelve true o false, por ejemplo, devolverá true si la URL actual es una página dentro del administrador. 

El significado de esta línea de código es el siguiente: si el contenido pertenece a un post individual y la URL del post no es un post que estoy editando en el administrador WP, entonces entra. En caso contrario salta la condición y devuelve el contenido sin modificar.


return insertar_despues_del_parrafo( $contenido_ad, 2, $content );

Si se da la condición anterior, llamo a la función que se encarga de buscar el párrafo concreto, insertar el contenido y devolver el contenido modificado. La llamada a la función la realizo enviando las tres variables necesarias para ejecutarse:

  1. El contenido del anuncio que quiero insertar ($contenido_ad)
  2. La cantidad de párrafos que quiero que se impriman antes que la publicidad (2). Si quieres que tus anuncios se inserten después de otro párrafo cambia el número 2 por el párrafo donde quieres que se inserte la publicidad.
  3. El contenido entero del post que ha facilitado el filtro the_content ($content)

En la misma llamada indicamos que nos devuelva el resultado de la función insertar_despues_del_parrafo. Para que lo entiendas sin problemas, es equivalente al siguiente código:

$parrafo_con_publicidad= insertar_despues_del_parrafo( $contenido_ad, 2, $content );
return $parrafo_con_publicidad;

3.- Función buscar párrafo he insertar
function insertar_despues_del_parrafo( $insertion, $paragraph_id, $content ) {

Es la función que se encargará de dividir el contenido en párrafos y insertar el anuncio en el lugar adecuado.


$closing_p = '</p>';
$paragraphs = explode( $closing_p, $content );

Para dividir el contenido en párrafos usamos la función PHP «explode». Esta función se encarga de dividir un string, en nuestro ejemplo $content en varios string. Para dividir el string en otros le tenemos que indicar por donde dividir. Como queremos que divida párrafos, le decimos que cada vez que encuentre una etiqueta de cierre de párrafo </p>, corte el string por ahí. 

Un ejemplo:

$closing_p=»</p>»;

$content=<p>Peras</p><p>Manzanas</p><p>Limones</p><p>Naranjas</p><p>Melón</p>;

$paragraphs = explode( $closing_p, $content );

$paragraphs[0]=<p>Peras;$paragraphs[1]=<p>Manzanas;$paragraphs[2]=<p>Limones;

El problema es que explode se ha cargado todas las etiquetas de párrafo… lo solucionaremos después.


foreach ($paragraphs as $index => $paragraph) {

Después de dividir el string en párrafos y guardarlos en el array $paragraphs, debemos recorrer todo el array. Vamos a recorrer el array con foreach, puedes trabajar con for o while si te resulta más cómodo. La función de esta línea de código es: recorre el array, por cada iteración guarda el resultado en la variable $paragraph y guarda la posición en  $index.


if ( trim( $paragraph ) ) {
            $paragraphs[$index] .= $closing_p;
        }

Ya he comentado antes que la función de PHP explode borra el delimitador. Es decir nuestros párrafos individuales han perdido la etiqueta de cierre de párrafo. Vamos a añadir de nuevo esa etiqueta para conservar el HTML correcto. Empleamos la función de PHP trim sobre cada párrafo individual extraído del foreach. Trim devuelve el string sin espacios al inicio y al final del párrafo. Volvemos a guardar el string en el array de todo el contenido, en la misma posición pero añadiendo al final </p>.

$paragraphs[$index] .= $closing_p;

Si esto te resulta confuso o te has perdido, escribe un comentario y trataré de explicarlo de forma que te resulte claro.


if ( $paragraph_id == $index + 1 ) {
            $paragraphs[$index] .= $insertion;
        }

Ahora comprobamos si el ID del párrafo, en nuestro caso «2», es igual al índice del array +1. Recuerda que los índices comienzan en «0», es decir el párrafo dos estará guardado en la posición del array «1». En caso de que estemos en el segundo párrafo añadimos $insertion, que es la variable que le hemos pasado $contenido_ad, nuestro anuncio.


return implode( '', $paragraphs );

por último devolvemos todo el contenido del array y separamos cada elemento con un espacio. La función implode se encarga de asignar  algo, en nuestro caso un espacio (‘ ‘) entre los elementos de un array.

¿Ha sido duro?

La explicación anterior te ayuda a modificar el código y adaptarlo a tus necesidades. Vamos a ver unos cuantos ejemplos de código modificados que insertan varios anuncios dentro del contenido, insertan anuncios en páginas, insertan publicidad solo en post de una determinada categoría…

Modificaciones del código insertar anuncios

Insertar la publicidad dos veces en el contenido
function insertar_anuncios_contenido_post( $content ) {
     
    $contenido_ad1 = '<div>El contenido del anuncio</div>';
    $contenido_ad2=$contenido_ad1;
 
    if ( is_single() && ! is_admin() ) {
        $content= insertar_despues_del_parrafo( $contenido_ad1, 2, $content );
        $content= insertar_despues_del_parrafo( $contenido_ad2, 8, $content );
        return $content;
    }
     
    return $content;
}

El código anterior inserta el mismo anuncio dentro del contenido de los post después del párrafo 2 y después del párrafo 8.

Varios anuncios en el mismo post
function insertar_anuncios_contenido_post( $content ) {
     
    $contenido_ad1 = '<div>El contenido del 1 anuncio</div>';
    $contenido_ad2= '<div>El contenido del 2 anuncio</div>';
 
    if ( is_single() && ! is_admin() ) {
        $content= insertar_despues_del_parrafo( $contenido_ad1, 2, $content );
        $content= insertar_despues_del_parrafo( $contenido_ad2, 8, $content );
        return $content;
    }
     
    return $content;
}
Mostrar anuncios en determinados post

Si quieres que tus anuncios se muestren solamente en algunos post, puedes utilizar is_single() con diferentes parámetros.

Por ejemplo, insertar publicidad dentro del contenido del post con ID 17:

is_single('17');

o en post que cumplan:

is_single(array(17,'beef-stew','Irish Stew'));

que tienen asignado el ID 17, que su slug es «beef-stew» o su título «Irish Stew».

También puedes crear diferentes anuncios para cada categoría de tus entradas. Si en tu blog hablas de diseño, puedes crear varias funciones: una para iluminación, otra para muebles…

Si quieres insertar publicidad de muebles únicamente en los post con categoría «muebles»:

if ( is_single() && &&  is_category( 'muebles' ) ! is_admin() ) {

Como ves podemos crear infinitas variantes del código. Si necesitas ayuda para adaptar el código puedes escribir un comentario.

Insertar anuncios en páginas

Si quieres insertar publicidad dentro del contenido de tus páginas, lo único que debes cambiar en el código es:

if ( is_single() && ! is_admin() ) {

por lo siguiente:

// When any single Page is being displayed.
if ( is_page() && ! is_admin() ) {

Si quieres insertar publicidad dentro del contenido de páginas concretas, entonces:

is_page( 'contacto' );

esto inserta en anuncio dentro de la página contacto. También puedes pasar el ID de página, ejemplo:

is_page('23');

se mostrará la publicidad en la página cuyo ID es 23.

o en múltiples páginas:

is_page( array( 42, 'about-me', 'Contact' ) );

imprimir el anuncio dentro del contenido de las páginas con ID 42, slug o final de URL «about-me» y con título de página «Contact».

Mostrar banner publicidad en entradas personalizadas

Si tienes creadas entradas personalizadas en tu WP puedes utilizar el siguiente código para añadir banners de publicidad a las entradas personalizadas. Tienes que sustituir is_single() por:

is_singular( 'libro' );

Si además de a las entradas tipo libro quieres añadir a otras entradas personalizadas código de anuncios:

is_singular( array( 'pelicula', 'libro' ) );

 

Insertar publicidad dentro del contenido de tus post utilizando un plugin WordPress

Hay varios plugins que te facilitan la inserción de banners de publicidad dentro del contenido en Wp. Voy a nombrar dos en concreto, ya que son los únicos con los que he trabajado en algunos proyectos.

El primero Post Adverts es un plugin sencillo de configurar. Después de la instalación, verás un nuevo menú en el administrador de WP: Post Adverts > Settings, desde el menú puedes indicar la configuración que deseas:

  1. insertar anuncios dentro del contenido de post, páginas o entradas personalizadas.
  2. Mostrar la publicidad antes del contenido, después del contenido o en un determinado párrafo.
  3. Compatible con código de terceros como Google Adsense.

Otro plugin similar es Quick Adsense, tiene una interfaz muy sencilla con múltiples opciones de configuración. 


Y esto es todo por hoy, después de este intenso post estoy segura de que estarás capacitado para insertar banners dentro del contenido de tus páginas, post o entradas personalizadas. Si alguna parte del tutorial se te resiste puedes enviar un comentario y te echo una mano.

Cómo cambiar longitud extractos WordPress (excerpt)

Cómo cambiar longitud extractos WordPress (excerpt)

Cómo cambiar longitud extractos WordPress: script modificar excerpt

Conoceremos las distintas funciones de WordPress para mostrar el contenido de post o páginas. Aprenderemos a diferenciar entre los extractos o resúmenes de contenido automático y los extractos manuales o personalizados. Por último, nos centraremos en el propósito de este artículo: «cambiar longitud extractos WordPress», para ello implementaremos algunos códigos que puedes añadir fácilmente a tu tema. Encontrarás códigos para modificar la longitud de extractos manuales y modificar la longitud de extractos automáticos.

Qué son los extractos en WordPress

La palabra «extracto» en el contexto de WordPress significa resumen y se refiere a la forma de mostrar el contenido de los post en WordPress. Contenido completo o contenido resumido.

Cuando mostramos el contenido de nuestras entradas en las distintas páginas de nuestra web, podemos mostrar todo el contenido (the_content()) o solo una parte del mismo (the_excerpt()).

Según el tema que tengas instalado en WordPress, verás que algunas plantillas hacen uso de la función the_excerpt para mostrar un resumen de la entrada o the_content para mostrar todo el contenido. Por ejemplo, por norma general el archivo single.php hace uso de la función the_content() y muestra todo el contenido del post, y el archivo page-blog.php suele invocar a la función the_excerpt para mostrar una porción del contenido. Encontrarás estás funciones dentro del loop de la plantilla.

Ejemplo plantilla WP funcion the excerpt

Ejemplo de uso de la función the_excerpt() en una plantilla de un tema WordPress

Vamos a profundizar en el uso de la función the_excerpt().

Tipos de extractos WordPress: extractos automáticos, extractos manuales y tag more

Extracto manual

Lo tenemos que definir manualmente desde el administrador de WordPress, en el editor de entradas. Si tu tema soporta extractos manuales, primero tienes que activarlo en el editor de entradas en «Opciones de pantalla».

Para activarlo vamos al administrador y pulsamos sobre el menú Entrada  >> Añadir entrada y abrimos las opciones de pantalla.

Extracto Manual en WordPress

Marcas la casilla de Extracto. Cierras las opciones de pantalla. Verás debajo de la edición de contenido del post una nueva caja para editar tu extracto. Escribe un resumen de tu entrada, un texto atractivo o una llamada a la acción.

Etiqueta/tag more (<!–more–>)

Con la etiqueta «more», limitamos la cantidad de contenido que queremos que se muestre como extracto de una entrada. Su uso es muy sencillo; primero escribimos el contenido o parte del contenido de nuestro post, luego nos situamos con el ratón al final del contenido que queremos mostrar y por último pulsamos sobre el botón del editor que inserta la etiqueta «more».

Insertar etiqueta more

En esta imagen puedes observar el aspecto de la etiqueta en la ventana de edición visual.

Etiqueta more en el editor visual

En esta imagen puedes observar el aspecto de la etiqueta en la ventana de edición HTML.

Etiqueta more en la ventana de edición HTML

Extracto automático

El nombre ya nos está indica que se crea automáticamente desde WordPress. Su funcionamiento es recoger las primeras 55 palabras del contenido de un post y mostrarlas añadiendo al final […]. Su tamaño está definido de antemano, para modificarlo necesitamos añadir una función a nuestro archivo functions.php que os enseñaré en este post.

Cómo funciona the_excerpt en WordPress

Si en alguna plantilla del tema se llama a la función the_excerpt(), WordPress comprueba si existe un extracto manual, si existe lo muestra, en caso contrario busca la etiqueta tag: <!–more–> para mostrar la porción de texto limitada por esa etiqueta, si tampoco existe la etiqueta «more» entonces muestra un extracto automático, es decir, muestra las primeras 55 palabras del contenido de tu entrada y elimina el formato e imágenes.

Funcionamiento the_excerpt en WordPress

Modificar con código PHP la longitud de los extractos en WordPress

Todos los script de código que vamos a ver a continuación, se deben insertar en el archivo functions.php de tu tema. El archivo functions.php se encuentra ubicado en la siguiente ruta: tusitio/wp-content/themes/tutema/functions.php

Además según el código que quieras emplear, deberás modificar algunas plantillas PHP de tu tema. Recuerda que cualquier modificación que hagas directamente en los archivos de tu tema, se perderá cuando actualices el mismo. Para evitar que esto ocurra, debes trabajar con TEMAS HIJOS. En este blog tienes varios artículos que te ayudarán a instalar y trabajar con un tema hijo.

Código para cambiar la longitud de los extractos automáticos

OJO -> Este código sólo funciona si no trabajas con extractos automáticos. Si trabajas con extractos manuales debes ir al siguiente apartado de este artículo. Encontrarás una función interesante que es capaz de trabajar con los extractos manuales y si no están definidos crear un extracto automático con la longitud personalizada.

El primer código que vamos a ver sirve para modificar los extractos automáticos a un número determinado «x» que será el mismo para toda tu web. Es decir, es una función estática.

function cambiar_limite_excerpt_estatico($limite) {
	return 70;
}
add_filter ('excerpt_length', 'cambiar_limite_excerpt_estatico', 999);

En este código empleamos el filtro de WordPress excerpt_length que admite como parámetro un entero que en la función hemos denominado $limite. Mediante el filtro estamos modificando la longitud inicial de the_excerpt de 55 a 70 palabras.

El siguiente código, mejora el script anterior ya que nos permite tratar la variable $limite dentro de la función. 

function cambiar_limite_excerpt_dinamico($limite) 
{
        if (!$limite) // si no se pasamos limite
        {
	    return 70; //se muestran las primeras 40 palabras
        }
        else //si pasamos limite
        {
             return $limite; //se muestra el num palabras indicado
        }
}
add_filter( 'excerpt_length', 'cambiar_limite_excerpt_dinamico', 999 );

Para usar esta función debes modificar las plantillas de tu tema, sustituye la llamada a la función the_excerpt() por el nombre de la nueva función cambiar_limite_excerpt_dinamico(30).

Recuerda que el filtro excerpt_length solo se aplica con extractos automáticos, nunca funcionará para modificar el tamaño si trabajas con extractos manuales.

Código para cambiar la longitud de los extractos manuales o personalizados

Recuerda que las funciones anteriores solo trabajan con extractos automáticos. Si tu blog tiene definidos extractos manuales o personalizados, debes utilizar la siguiente función para recortar los extractos manuales;

function wp_trim_all_excerpt($text) {
global $post;
   $raw_excerpt = $text;
   if ( '' == $text ) {
      $text = get_the_content('');
      $text = strip_shortcodes( $text );
      $text = apply_filters('the_content', $text);
      $text = str_replace(']]>', ']]&gt;', $text);
   }

$text = strip_tags($text);
$excerpt_length = apply_filters('excerpt_length', 60);
$excerpt_more = apply_filters('excerpt_more', ' ' . ' [...]');
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more ); 

return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); 
}

remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'wp_trim_all_excerpt');

Estamos empleando el filtro get_the_excerpt, a partir de ahora si en tu tema se llama a la función the_excerpt() el código que se ejecuta es este. La longitud de tus extractos será de 60 palabras.

Otros script interesantes para modificar the_excerpt

Los extracto automáticos, terminan de manera predeterminada con los siguientes caracteres; […]. Vamos a modificar esto por el texto «Leer más…»

function resumen_con_leer_mas() {
       global $post;
       return '<a href="'. get_permalink($post->ID) . '"> Leer más...</a>';
}
add_filter('excerpt_more', 'resumen_con_leer_mas');

Copia y pega el código en tu archivo functions.php. Ahora cada vez que tu plantilla muestre un extracto al final agregará un enlace al post completo con el texto «Leer más…»

Encontrarás más información sobre la función the_excerpt en: https://developer.wordpress.org/reference/functions/the_excerpt/

Redireccionar wordpress.com a dominio propio

Redireccionar wordpress.com a dominio propio

Migrando wordpress.com a dominio propio

Para seguir este artículo debes tener un dominio propio y un hosting o alojamiento para tu web ya contratado. Además debemos exportar todos los datos de  tuweb.wordpress.com e importarlas en www.tuweb.com o similar. Si no tienes dominio, hosting o no sabes como realizar la exportación de datos, puedes escribir un mensaje y te explico como dar estos primeros pasos. Si nos encontramos en este escenario ya podemos redireccionar wordpress.com a dominio propio.

Antes de continuar tiene que quedar claro que lo que pretendemos es redireccionar cada página, entradas, comentario… de nuestro wordpress.com a nuestra nueva web. La herramienta de la que voy a hablar es de pago, son 13€ anuales, si tu sitio no tiene mucha información ni visitas quizá te compense más crear una landing page en tu wordpress.com que lleve a tu nuevo dominio. Obviamente para redireccionar correctamente todas las páginas y entradas, tendrás que mantener la misma estructura en los dos sitios.

Herramienta para redireccionar wordpress.com

WordPress.com nos ofrece un servicio de pago anual (13€) que nos permite crear un redireccionamiento desde nuestro sitio wordpress.com a un dominio propio. 

Es muy sencillo de configurar. Los pasos son los siguientes:

1. entramos en la URL https://wordpress.com/domains/add/site-redirect

2. seleccionamos el sitio que queremos redireccionar, 

Redireccionar wordpress.com

3. Escribimos nuestro dominio y pulsamos sobre el botón «Ir»:

redireccionar-wordpress-a-dominio-propio

4. En la siguiente pantalla debemos introducir los datos de pago: puedes pagar con tarjeta o Paypal.

Herramienta redireccionar wordpress.com

Con estos pasos ya has conseguido redireccionar wordpress.com a un dominio propio. Lo ideal es que pagues la herramienta durante uno o dos años, pasado este tiempo elimines tu wordpress.com desde Ajustes >> Elimina tu sitio permanentemente y da de baja el redireccionamiento.

Eliminar blog wordpress.com

Es importante que elimines todos los datos de tu sitio para no crear duplicidades de contenido y tener problemas con el SEO de tu página.

 

 

 

 

Eliminar aviso: no disponible por mantenimiento programado WordPress

Eliminar aviso: no disponible por mantenimiento programado WordPress

Cómo eliminar el aviso: no disponible por mantenimiento programado en WordPress

«No disponible por mantenimiento programado. Vuelve a comprobar el sitio en unos minutos. Gracias.» Este es el aviso que ven los usuarios cuando intentan acceder a un sitio WordPress que se encuentra actualizando temas o plugins en ese preciso instante.

WordPress activa automáticamente el mantenimiento de una web cuando desde el administrador actualizamos diferentes componentes. Este Modo de Mantenimiento o «Maintenance Mode» no permite el acceso de usuarios al frontend. 

maintenance mode

Finalizadas las actualizaciones, el modo mantenimiento de WordPress se desactiva y los usuarios ya pueden acceder con normalidad al sitio. Sin embargo a veces este proceso no termina de la forma esperada y a pesar de que las actualizaciones se han instalado con éxito, tu web se ha quedado colgada en modo mantenimiento y es imposible acceder a ella. Probablemente durante el proceso de actualización, has intentado acceder a alguna otra opción de WP sin esperar a que la actualización terminase.  

Solución: eliminar aviso «No disponible por mantenimiento programado»

Para desactivar el modo mantenimiento debemos tener acceso a los archivos de WordPress. En la raíz de nuestra instalación encontraremos un archivo llamado .maintenance (fichero oculto) que debemos borrar. 

Para acceder a los directorios de tu instalación de WordPress puedes hacerlo desde el panel de usuario de tu hosting o instalando algún programa tipo Filezilla . Recuerda que estamos hablando de un archivo oculto, así que debes tener la opción de ver archivos ocultos en la configuración de tu cliente FTP, si utilizas Filezilla asegúrate de tener marcada la opción: Servidor > Forzar mostrar archivos ocultos.

 

Ver ID página o post actual en WordPress

Ver ID página o post actual en WordPress

Ver ID página o post actual en el administrador o en template

Cómo ver ID página post actual:

  1. dentro del administrador de WordPress: saber ID de post o página que estoy o he editado.
  2. desde una plantilla WordPress: saber ID de post o página que está viendo el usuario de la web. 

Ver ID asignado Dentro del Administrador WordPress

Si estas editando un post o página y necesitas saber el ID que se le ha asignado a esa página solo tienes que fijarte en la URL que figura en el navegador, por ejemplo:

http://tusitio.com/wp-admin/post.php?post=5643 

Para que WordPress asigne un ID primero tienes que pulsar sobre el botón «Publicar» o «Solo guardar» en el editor de página o post.

Ver ID post o pagina WordPress

Si tu página ya estaba publicada pero quieres consultar el ID, debes ir a Páginas, y pulsar sobre Editar  en la página o post que quieras ver el ID. Al cargarse la edición del post o la página verás la URL en tu navegador con el ID.

Ver ID de página o  post que se está viendo actualmente en la web

Es una necesidad muy común en el desarrollo de WordPress. A menudo implementamos funciones que queremos que actúen de diferente forma dependiendo de la página que esté visitando el usuario. La forma de llamar al ID de una página o post es diferente si la llamada la haces dentro del loop o bucle de la consulta o si la haces fuera del bucle. 

Fuera del bucle

¿Necesitas conocer el ID de página actual en una función que no implementa un bucle? Para ver el ID de página fuera del bucle:

global $wp_query;
$id = $wp_query->post->ID;

en la variable $id has recogido el ID de página que ahora puedes mostrar:

return $id;

Dentro del bucle

Recuerda que el inicio del bucle es:

<?php while ( have_posts() ) : the_post(); ?>

o similar.

En cualquier lugar dentro del bucle o loop que realiza la consulta, añade el siguiente código:

$id = get_the_ID();

Ya solo te queda mostrar la variable en el lugar adecuado.

 

Error método constructor Widget al actualizar WordPress o versión PHP

Error método constructor Widget al actualizar WordPress o versión PHP

Error método constructor: The called constructor method for WP_Widget … is deprecated …

Si has actualizado tu WordPress a una versión 4.3 o mayor y tienes algún plugin que crea Widget desarrollado con PHP4 te puedes encontrar con el siguiente error método constructor widget:

The called constructor method for WP_Widget … is deprecated …

Use __construct() instead.

 

error método constructor widget

Esto es debido a que la forma de crear Widgets con PHP 4 quedo obsoleta de manera oficial en la versión 4.3 de WordPress. Además si actualizas tu servidor a PHP7, o tu WordPress a 4.8.+ tu página dejará de funcionar ya que no hay soporte para los constructores de PHP4.

Vamos a repasar en este artículo las soluciones posibles para eliminar este error de WordPress:

  1. Modificaremos el código de los widgets creados con PHP 4 con el nuevo código que nos indican en la documentación técnica para desarrolladores de WordPress.
  2. Si no tenemos acceso al código del plugin que provoca el error o no nos atrevemos a realizar modificaciones, aprenderemos a añadir un filtro en nuestro WordPress que ignore el error y cargue la web.

Modificar el código de los widgets creados con PHP 4

Si tienes acceso al código que provoca el error (en el mismo aviso de error te muestra el plugin que lo causa y la línea de código) , entonces busca la carpeta del plugin y la línea del código donde se llama al constructor del widget.

Encontrarás algo así:

class widget_ejemplo extends WP_Widget {
 
 // constructor
 function widget_ejemplo() {
 parent::WP_Widget(
 false,
 __( 'Ejemplo Widget', 'ejemplo-widget' ),
 array( 'description' => __( 'Mi ejemplo widget', 'ejemplo-widget' ) ) );
 }
 
 // ...
}

También puedes encontrar el constructor del Widget con el siguiente código:

class widget_ejemplo extends WP_Widget {
 
 // constructor
 function widget_ejemplo() {
 $this->WP_Widget(
 false,
 __( 'Ejemplo Widget', 'ejemplo-widget' ),
 array( 'description' => __( 'Mi ejemplo widget', 'ejemplo-widget' ) ) );
 }
 
 // ...
}

Después de localizar el código, tenemos que modificar las dos primeras líneas debajo de:  //constructor:

vamos a cambiar function widget_ejemplo() por function __construct()parent::WP_Widget( $this->WP_Widget( por parent::__construct(

 function __construct() {
 parent::__construct(

El código final quedaría de la siguiente manera:

class widget_ejemplo extends WP_Widget {
 
 // constructor
 function __construct() {
 parent::__construct(
 false,
 __( 'Ejemplo Widget', 'ejemplo-widget' ),
 array( 'description' => __( 'Mi ejemplo widget', 'ejemplo-widget' ) ) );
 }
 
 // ...
}

Guarda los cambios en el archivo y comprueba que el error ha desaparecido.

Filtro en WordPress para ignorar constructores obsoletos

Si no tenemos acceso al código del plugin que provoca el error o no nos atrevemos a realizar modificaciones, puedes intentar primero ponerte en contacto con el desarrollador del plugin para que modifique los archivos y actualice el plugin.

Mientras esperas puedes añadir esta línea en tu archivo functions.php

add_filter('deprecated_constructor_trigger_error', '__return_false');

con esta línea conseguimos que WP ignore el error método constructor widget y siga ejecutando la página.

Si el desarrollador no actualiza el plugin intenta modificar el código siguiendo el ejemplo de este post o busca un plugin que realice funciones similares y esté actualizado.

 

 

 

Redireccionar página padre a primer hijo en WordPress

Redireccionar página padre a primer hijo en WordPress

Enlaces padre redireccionan a su primer

¿Qué quiero decir con Redireccionar página padre? al pulsar sobre el enlace de una página superior se abra el contenido del primer hijo.

Redireccionar página padre

¿Por qué puedo necesitar redireccionar una página padre?

En algunos proyectos debemos guardar una jerarquía de páginas y contenidos. De esta forma creamos una estructura donde algunas páginas actúan de padres que contienen a su vez otras páginas hijas. Este tipo de estructuras es común en muchos proyectos. Las páginas padre pueden ser páginas vacías, sin contenido cuya única función es mantener la estructura de páginas y crear un enlace.

Un ejemplo: 

ASIGNATURAS

  • Matemáticas
  • Física
  • Literatura

Asignaturas es la página padre, es una página sin contenido y es una página superior. Matemáticas, Física y Literatura cuelgan de ASIGNATURAS, tienen contenido, es común denominarlas como páginas hijas.

Si llevamos estas páginas a un menú podemos definir ASIGNATURAS como enlace personalizado* y el link del primer hijo. El resto de las páginas en el menú se añaden como páginas anidadas de este enlace superior. De esta forma al pulsar sobre el menú ASIGNATURAS se abre el contenido del primer hijo. El problema de esto es que perdemos la estructura de la URL.

Lo ilustro con un ejemplo: suponemos que la web se llama www.problemasdelcole.com, queremos que nuestras url se formen así:

www.problemasdelcole.com/asignaturas/matematicas

www.problemasdelcole.com/asignaturas/fisica

www.problemasdelcole.com/asignaturas/literatura

Con la solución de crear un «enlace personalizado» en el menú, nuestra URL sería así:

www.problemasdelcole.com/matematicas

como esta solución en muchos proyectos no es válida, vamos a explicar que podemos hacer para conseguir que las páginas padre sin contenido, redireccionen al primer hijo y se mantenga la jerarquía en la URL.

Cómo redireccionar página padre

Lo primero es crear una nueva plantilla o template en nuestro WordPress. Abrimos nuestro editor de páginas y escribimos lo siguiente:

<?php
/*
Template Name: Redireccionar a su primer hijo
*/
if (have_posts()) {
  while (have_posts()) {
    the_post();
    $pagekids = get_pages("child_of=".$post->ID."&sort_column=menu_order");
    $firstchild = $pagekids[0];
    wp_redirect(get_permalink($firstchild->ID));
  }
}
?>

guardamos el archivo con un nombre significativo, por ejemplo: redirecciona-hijo.php. Lo guardas dentro de la carpeta de archivos de tu tema:

wp-content/themes/tutema/redirecciona-hijo.php

Crear página padre

Lo siguiente es ir al editor de WordPress y a todas las páginas padres asignarles la nueva Plantilla que hemos creado. En nuestro ejemplo: abrimos el editor de páginas de WordPress y seleccionamos la página «ASIGNATURAS«. Dentro de la edición de página abrimos el desplegable de «Plantilla» y seleccionamos:

«Redireccionar a su primer hijo»

Redireccionar página padre al primer hijo

Por último actualizamos la página para que se guarden los cambios.

Crear páginas hijo

Ahora creamos las páginas que cuelgan del menú Asignaturas. En nuestro ejemplo; matemáticas, física… Les asignamos como Superior (padre) la página ASIGNATURAS. Aquí cuidado: «tienes que seleccionar la plantilla propia de estas páginas, pero no la nueva que hemos creado, puesto que estos son hijos y no necesitan redirección».

Redireccionar menú padre a primer hijo

Las páginas creadas tendrán la siguiente URL:

www.problemasdelcole.com/asignaturas/matematicas

Ya tenemos todas las páginas creadas.

Crear menú WordPress

Ahora vamos a crear el menú, en nuestro WordPress. El primer menú será ASIGNATURAS. Este menú se debe crear como enlace personalizado: 

Para crear un elemento de menú tipo «enlace personalizado» lo único que hay que hacer es: dentro del editor de menús de WordPress,

  1. Seleccionar enlace personalizado.
  2. Escribir un texto de enlace. En nuestro ejemplo: ASIGNATURAS.
  3. Escribir una URL. Da igual la URL que emplees, es un paso necesario para que WP nos admita el nuevo menú, pero la vamos a eliminar después de crearlo.
  4. Pulsa sobre el botón «Añadir al menú».

Crear enlaces personalizados WP

Una vez creado el elemento del menú como un enlace personalizado se puede quitar la URL para que no apunte a ningún sitio. Se convierte así en un menú de texto sin link.

Los menús de las páginas hijos: matemáticas, física… se crean como menús de páginas.

Crear menú WordPress

Explicación código: Redireccionar página padre

El código es muy sencillo de seguir. Las primeras líneas son la declaración del nombre de la plantilla:  «Redireccionar a su primer hijo», es el nombre que encontraremos en el menú desplegable de «Plantillas» dentro de la edición de páginas de WordPress. 

A continuación tenemos el bucle típico, común a todas las páginas de WP. Dentro del bucle declaramos una variable array: $pagekids que recoge todas las páginas hijas de la actual ordenadas. Declaramos una nueva variable $firstchild, que guarda la primera entrada del array, es decir el primer hijo del padre.

Por último hacemos uso de la función wp_redirect pasando la url del primer hijo.

Modificaciones del código

get_pages(), es la función que hemos empleado para recoger las páginas. Este array admite diversos parámetros. En nuestro ejemplo he añadido los parámetros: ‘child_of’ y ‘sort_column’. También puedes utilizar otro tipo de argumentos y combinarlos.

<?php
/**
 * Template Name: Discos Propios
 *
 */

if (have_posts()) {
  while (have_posts()) {
    the_post();
    $pagekids = get_pages("child_of=".$post->ID."&sort_column=post_date&sort_order=desc");
    $firstchild = $pagekids[0];
    wp_redirect(get_permalink($firstchild->ID));
  }
}
?>

En el ejemplo anterior, el array se forma con los hijos, ordenados por fecha de publicación y orden descendente.

Para entender mejor las posibilidades de la función get_pages, puedes visitar la siguientes páginas:

https://developer.wordpress.org/reference/functions/get_pages/

https://codex.wordpress.org/Function_Reference/get_pages