Archivo de la etiqueta: PHP

WordPress: Redireccionar una página a la primer sub-página

Muchos usuarios de WordPress usan una estructura de paginas -> sub-paginas para mantener ordenada su información. En algunos casos, las paginas principales quedan vacias y aunque su existencia es importante, su contenido no. En estos casos es útil crear una nueva plantilla en el tema, que hace una redirección a la primer sub-página de la pagina actual:

<?php
/*
Template Name: Redirect To First Child
*/
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));
  }
}
?>

Solo crea un nuevo archivo con este código, de nombre single-redirect.php o algo similar y asignala como plantilla en la pagina que quieres usar la redirección.

Algunas operaciones básicas con Cpanel XMLAPI

En un proyecto reciente para uno de mis clientes debía crear automáticamente cuentas de FTP, borrarlas luego de una semana y en otra semana mas, borrar el directorio con todos sus archivos. Resulta que en un servidor con Cpanel es mucho mas fácil de lo que parece, utilizando las funciones de Cpanel XMLAPI y con el nombre de usuario y contraseña de la cuenta.

Configuración básica para usar xmlapi.php: recuerda poner esta configuración antes de incluir la librería.

$cpanelConnection = array (
'host' => 'ip o nombre de dominio del servidor',
'port' => '2083',
'user' => 'nombre de usuario cpanel',
'pass' => 'contraseña cpanel') ;

Crear una cuenta de FTP:

require_once("xmlapi.php");

$xmlapi = new xmlapi($cpanelConnection['host']);
$xmlapi->password_auth($cpanelConnection['user'],$cpanelConnection['pass']);

$xmlapi->set_port($cpanelConnection['port']);
$xmlapi->set_debug(1);

$args = array( 
    'user'=>strtolower('nombre de usuario de la nueva cuenta de ftp, sin espacios o simbolos'),
    'pass'=>'password de la nueva cuenta de ftp',
    'quota'=>0, //0 si es ilimitado
    'homedir'=>'ruta al directorio de la nueva cuenta de ftp'
);

$xmlapi->api2_query($cpanelConnection['user'], 'Ftp', 'addftp', $args);

Borrar una cuenta de FTP (sin borrar sus archivos):

require_once("xmlapi.php");

$xmlapi = new xmlapi($cpanelConnection['host']);
$xmlapi->password_auth($cpanelConnection['user'],$cpanelConnection['pass']);

$xmlapi->set_port($cpanelConnection['port']);
$xmlapi->set_debug(1);

$args = array( 
    str_replace('.','','nombre de usuario ftp a eliminar')
);

$xmlapi->api1_query($cpanelConnection['user'], 'Ftp', 'delftp', $args);

Luego de crear y borrar las cuentas de ftp, debía borrar el directorio con todos sus archivos. Normalmente se puede hacer en PHP  con un script recursivo; pero cuando se crea la cuenta de FTP desde Cpanel, se crea también un archivo .ftpquota, que no puede ser borrado ya que pertenece a otro usuario. Así que puse manos a la obra a buscar como borrar el directorio con el mismo usuario de Cpanel con que se creo el directorio:

require_once("xmlapi.php");

$xmlapi = new xmlapi($cpanelConnection['host']);
$xmlapi->password_auth($cpanelConnection['user'],$cpanelConnection['pass']);

$xmlapi->set_port($cpanelConnection['port']);
$xmlapi->set_debug(1);

$xmlapi->api2_query($cpanelConnection['user'], 'Fileman', 'fileop', array("op"=>"unlink", "sourcefiles"=>'Ruta de la carpeta a eliminar'));

Hay muchas otras funciones para explorar y automatizar un poco mas los procesos que escribimos en nuestros scripts.

En caso que no encuentren la librería en el sitio del desarrollador, la pueden descargar aqui: xmlapi.php

Mover un sitio WordPress a otro dominio

Les ha pasado alguna vez al terminar el desarrollo de un sitio en WordPress, que al mover el código al servidor del cliente, se pierden configuraciones, widgets, o menús?

El procedimiento que sigue la mayoría de personas es simplemente descargar la base de datos del sitio, buscar y reemplazar el nombre del dominio en el archivo SQL y luego subir este script modificado en el dominio nuevo.  Puede parecer que de esta forma todo esta bien, pero el problema esta en la forma como WordPress guarda la información de los widgets/menus en la base de datos: Serialized Data. Básicamente son cadenas de texto para el contenido y una variable para el tamaño de la cadena. Al buscar y reemplazar, la mayoría de las veces el nuevo nombre de dominio tiene mas o menos letras que el dominio que usamos para hacer el desarrollo y php al cargar el Serialized Data, rechaza el valor ya que el tamaño es diferente.

Desde el sitio oficial de WordPress nos dan la solucion al problema: utilizar el script http://spectacu.la/search-and-replace-for-wordpress-databases/ para hacer el cambio de dominio. Los pasos a seguir son:

  1. Descargar el script de la base de datos del sitio original.
  2. Sin hacer ninguna modificación, subir el script de la base de datos al servidor de destino.
  3. Instalar el script searchreplacedb2.php en el directorio public_html del servidor de destino y abrirlo en el navegador (ejemplo http://nuevoservidor.com/searchreplacedb2.php).
  4. Seguir las instrucciones en pantalla para buscar/reemplazar el nombre del dominio viejo, por el nombre de dominio nuevo.
  5. Borrar el script searchreplacedb2.php del servidor cuando termines! 

Es siempre recomendado bajar la última versión del archivo desde la pagina del desarrollador, pero por si acaso, aqui puedes bajar la version que utilice a la hora de escribir esta entrada:  searchreplacedb2.php