Permitir a los contribuidores de WordPress subir archivos

wordpress

Hola a todos, hoy les traigo un tip muy interesante para WordPress. Si eres de aquellos que necesita revisar los posts de la gente que colabora contigo antes de publicarlos, necesitas darles acceso de Contribuidor. Y si tienes bloggers invitados, también debes darles ese acceso. Pero el problema es que los contribuidores no pueden subir archivos a su post. Así, los contribuidores deben auxiliarse de sitios de terceros para subir archivos, lo que hace poco atractivo animarse para contribuir con tu blog. Continue reading

Archivo no encontrado en archivo existente

En uno de mis blogs estuve utilizando la librería timthumb.php para cambiar el tamaño de las imágenes. Resulta que la librería funcionaba perfectamente en la máquina local y en otro servidor, pero no funcionaba bien en el servidor donde estaba alojado el sitio del que les estoy hablando. Entonces indiscutiblemente concluí que era un problema específico de configuración en el servidor y me puse a investigar. Continue reading

El tipo de archivo no se ajusta a las directivas de seguridad. Prueba con otro.

el-tipo-de-archivo-no-se-ajusta-a-las-directivas-de-seguridad

A partir de WordPress 2.9, la subida de cualquier tipo de archivo que no se encuentre en una lista está desactivada. Previamente a esa versión, en WordPress existía un bug mediante el cual se podía subir un archivo .php. Es por eso que ahora el poder subir archivos de ciertos tipos está deshabilitado aunque seas administrador. Continue reading

Javascript: Cómo sumarle días a una fecha

jquery-calendar

A continuación les muestro un ejemplo donde utilizo dos datepickers de jquery para demostrar cómo sumarle días a una fecha. Cuando selecciono una fecha en el primer date picker, el segundo se actualiza con una fecha siete días después de la fecha en que se ha seleccionado el primero. Los detalles de cómo se hace los dejo comentado en el código. Mira el demo en este enlace.

<!DOCTYPE html>
<html>
<head>
 <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
 <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>

 <script>
 $(document).ready(function() {
 $("#datepicker").datepicker({
 onSelect: function(dateText, inst){
 //604800000 Es el equivalente en milisegundos a 7 días. Se obtiene multiplicando 24 horas por 60 minutos
 //por 60 segundos por 1000 milisegundos por la cantidad de días deseada
 var p = new Date(Date.parse(dateText) + 604800000);
 //p cotiene la nueva fecha. Ahora la desbaratamos en un valor string en formato mm/dd/aaaa
 var curr_date = p.getDate();
 var curr_month = p.getMonth();
 //Date.getMonth() me devuelve los meses del 0 al 11, así que hay que aumentarle 1 para obtener el mes real
 curr_month++;
 var curr_year = p.getFullYear();
 //armamos nuestro nuevo string para ajustar el valor del segundo datepicker
 var newdate = curr_month + "/" + curr_date + "/" + curr_year;
 $("#datepicker2").datepicker("setDate", newdate);
 }
 });

 $("#datepicker2").datepicker();
 });
 </script>
</head>
<body style="font-size:62.5%;">
<div type="text" id="datepicker"></div>
<div type="text" id="datepicker2"></div>
</body>
</html>

Obtener la altura del documento (cross-browser) IE, FF, Chrome, etc

document-height

La siguiente función retorna la altura de cualquier documento sin importar el navegador. Ha sido probada en IE6/7/8, FF2/3, Safari (Windows), Google Chrome y Opera 9.5:

function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}

Convertir Arrays a variables rápidamente en PHP

php-logo
Hay dos formas de convertir una cadena separada por comas a variables, una larga y una corta, y les muestro cóm0 a continuación:

La forma larga:

$miCadena = 'Un nombre,una direccion,otra direccion,un telefono,un codigo postal';
$miArreglo = explode(",", $miCadena);
$nombre = $miArreglo[0];
$direccion1 = $miArreglo[1];
$direccion2 = $miArreglo[2];
$telefono = $miArreglo[3];
$codigoPostal = $miArreglo[4];

echo "<strong>Nombre: </strong>" . $nombre . '<br />';
echo "<strong>Direccion 1: </strong>" . $direccion1 . '<br />';
echo "<strong>Direccion 2: </strong>" . $direccion2 . '<br />';
echo "<strong>Telefono: </strong>" . $telefono . '<br />';
echo "<strong>Codigo postal: </strong>" . $codigoPostal;

La forma corta:

$miCadena = 'Un nombre,una direccion,otra direccion,un telefono,un codigo postal';
list($nombre, $direccion1, $direccion2, $telefono, $codigoPostal) = explode(",", $miCadena);

echo "<strong>Nombre: </strong>" . $nombre . '<br />';
echo "<strong>Direccion 1: </strong>" . $direccion1 . '<br />';
echo "<strong>Direccion 2: </strong>" . $direccion2 . '<br />';
echo "<strong>Telefono: </strong>" . $telefono . '<br />';
echo "<strong>Codigo postal: </strong>" . $codigoPostal;

¿Quieres algún otro tip?. Déjame un comentario.

Convertir un arreglo (array) de PHP a JavaScript

php-logo

En el día de ayer me sucedió que estaba utilizando un plugin de WordPress para detectar el país de procedencia de los visitantes de una página y tomar esa información para redireccionar automáticamente al idioma de esa persona. No lo quise hacer utilizando el User Agent del navegador, porque una persona en Francia podría estar utilizando Firefox en inglés. Para mí es más preciso utilizar WP GeoLocation, con el cual puedo saber la ubicación de una persona basado en la dirección ip.
El caso es que formé en PHP un arreglo de los códigos de los países con sus códigos de idiomas pero no me había percatado de que WP GeoLocation me daba la información en JavaScript. Como mi recién formado arreglo de PHP era muy grande, tuve que buscar una forma automatizada para convertir ese arreglo de PHP a JavaScript y esta fue la solución:

<?php
$arreglo = array(
'clave 1' => 'valor 1',
'clave 2' => 'valor 2',
'clave x' => 'valor x',
);
?>

<script language="javascript">
var arr = {

<?php
foreach($arreglo as $key => $values){
$arr .= "'" . $key . "'" .   " : " . "'" . $values . "'" . ",";
}
$arr =  substr_replace($arr, '', -1);
echo $arr;
?>

};
</script>

Como pudimos apreciar en el código anterior, utilizamos un loop foreach para formar el arreglo al estilo javascript y lo almacenamos en una variable. Cuando termine el loop, nos va a sobrar una coma al final del arreglo, la cual eliminamos con el código de la línea 16. Finalmente imprimimos el arreglo en el navegador y salimos de PHP y en javascript cerramos con la llave y el punto y coma y todo listo. Puedes verificar si todo está bien desde JavaScript con alert(arr[clave]);

Agregar Botones Twitter y Facebook para tu blog de WordPress

Si lo que deseas es agregar botones a tus artículos de WordPress para que tus usuarios los compartan con un sólo clic en Twitter y WordPress, este es tu post. Les explicaré todo el proceso paso a paso, así que, comencemos:

Twitter:

Utilizaremos el plugin TweetMeme Retweet Button.

  1. En el panel de control de WordPress seleccionamos Plugin / Añadir Nuevo
    agregar-nuevo-plugin
  2. En el cuadro de búsqueda escribimos TweetMeme Button y hacemos clic en Buscar Plugins
    buscar-plugins
  3. En el listado que aparece buscamos TweetMeme Button. Si escribiste el nombre exactamente igual, debería ser el primero. Hacemos clic en Instalar
    instalar-tweetmeme
  4. En el Popup que aparece presionamos el botón Instalar ahora.
    instalar-ahora-tweetmeme
  5. Luego hacemos clic en el enlace Activar Plugin
    activar-tweetmeme

Ajustes de Tweetmeme:

  1. Localiza y haz clic en Tweetmeme al final de la sección izquierda del panel de administración de WordPress.
    ajustes-tweetmeme
  2. Cambia los ajustes de Tweetmeme de acuerdo a tus necesidades. Por ejemplo, yo prefiero utilizar la ubicación manual del botón porque así puedo controlar que salga donde yo quiera insertando un código en el template.
    ajustes-tweetmeme-1
  3. Si elegiste la ubicación manual, entonces inserta el siguiente código donde quieres que aparezca el botón:
    <?php
    if(function_exists('tweetmeme')) {
    echo tweetmeme();
    }?>
  4. Finalmente, deberías obtener algo como esto:
    tweetmeme

Facebook:

  1. Puedes seguir exactamente todos los pasos anteriores para un pluguin llamado Facebook Share (New) Button. OJO: No lo confundan con Facebook Share Button, porque ese no funciona.
  2. Si escogen la opción manual, para agreguen el siguiente código en el lugar donde desdean que aparezca:
    <?php if (function_exists('fbshare_manual')):
    echo fbshare_manual(); endif;?>

    facebookshare