Programo Web » PHP http://programoweb.com Desarrollo Web y WordPress Sat, 07 Aug 2010 00:10:59 +0000 en hourly 1 http://wordpress.org/?v=3.0 Feed con las últimas páginas de WordPress http://programoweb.com/feed-ultimas-paginas-wordpress.html http://programoweb.com/feed-ultimas-paginas-wordpress.html#comments Sun, 01 Aug 2010 04:58:37 +0000 JuanK http://programoweb.com/?p=1524 Ayer estuve buscando, desesperadamente casi, alguna forma de que se publiquen las últimas páginas estáticas creadas dentro de un feed, aunque no encontré ninguna forma de hacerlo, ni siquiera con plugin.

A causa de esto me acordé de un post que se publicó en Yoast.com, donde nos daban un código para crear un feed personalizable y se me ocurrió editarlo un poco.

Revisando un poco el Codex, la función query_posts, encontré una forma de publicar las últimas páginas en el feed, de esta forma:

<?php
/*
Template Name: Feed Páginas
*/

 
function yoast_rss_date( $timestamp = null ) {
  $timestamp = ($timestamp==null) ? time() : $timestamp;
  echo date(DATE_RSS, $timestamp);
}
 
function yoast_rss_text_limit($string, $length, $replacer = '...') {
  $string = strip_tags($string);
  if(strlen($string)> $length)
    return (preg_match('/^(.*)\W.*$/', substr($string, 0, $length+1), $matches) ? $matches[1] : substr($string, 0, $length)) . $replacer;   
  return $string;
}

$args = array(
    'posts_per_page' => 10,
    'post_type' => page,
);
 
$posts = query_posts($args);
 
$lastpost = $numposts - 1;
 
header("Content-Type: application/rss+xml; charset=UTF-8");
echo '<?xml version="1.0"?>';
?><rss version="2.0">
<channel>
  <title>Últimas páginas publicadas</title>
  <link>http://www.tublog.com/</link>
  <description>Las últimas páginas publicadas.</description>
  <language>es-cl</language>
  <pubDate><?php yoast_rss_date( strtotime($ps[$lastpost]->post_date_gmt) ); ?></pubDate>
  <lastBuildDate><?php yoast_rss_date( strtotime($ps[$lastpost]->post_date_gmt) ); ?></lastBuildDate>
  <managingEditor>joost@yoast.com</managingEditor>
<?php foreach ($posts as $post) { ?>
  <item>
    <title><?php echo get_the_title($post->ID); ?></title>
    <link><?php echo get_permalink($post->ID); ?></link>
    <description><?php echo '<![CDATA['.yoast_rss_text_limit($post->post_content, 500).'<br/><br/>Ver la fiche de <a href="'.get_permalink($post->ID).'">'.get_the_title($post->ID).'</a>'.']]>';  ?></description>
    <pubDate><?php yoast_rss_date( strtotime($post->post_date_gmt) ); ?></pubDate>
    <guid><?php echo get_permalink($post->ID); ?></guid>
  </item>
<?php } ?>
</channel>
</rss>

Para usarlo sólo deben crear una página nueva y elegir la plantilla "Feed Páginas" y listo.

Ahora sólo entren a la nueva página y verán su feed nuevo.

]]>
http://programoweb.com/feed-ultimas-paginas-wordpress.html/feed 2
WordPress 3.2 necesitará MySQL 5 http://programoweb.com/wordpress-3-2-necesitara-mysql-5.html http://programoweb.com/wordpress-3-2-necesitara-mysql-5.html#comments Sat, 24 Jul 2010 15:54:05 +0000 JuanK http://programoweb.com/?p=1508

Ayer, desde el blog oficial de WordPress anunciaron la "muerte" de PHP 4 y MySQL 4, obligándonos a utilizar un hosting con PHP 5 y MySQL 5 para la versión 3.2 de WordPress.

Esto es algo realmente malo, ya que están pidiendo cosas que no todos los hosts tienen, lo que se traducirá en una migración de parte de muchos usuarios a otros proveedores con mejores características, lo que implica un mayor gasto de dinero, siendo que WP es totalmente gratis :S.

Esto es algo, que en lo personal no me afecta, pero es obvio que no todos pueden decir lo mismo, aunque también puede ser un avance para la comunidad de desarrolladores, ya que estás nuevas versiones (PHP y MySQL) son muchos más fiables, seguras y rápidas, además evitaremos código extra en el núcleo de WP.

También han publicado un plugin, llamado Health Check plugin, que permite saber si tu hosting tiene los requisitos necesarios. Además les aviso que la versión 3.2 estará para el próximo año, por lo tanto aún tenemos tiempo de prepararnos para un cambio de host si es necesario.

Por último les dejo este comentario que publicaron en Ayuda WP, donde Darío Ferrer da a conocer su punto de vista y es realmente bueno, acierta en todo lo que dice, por lo que está actualización no deja de ser buena.

]]>
http://programoweb.com/wordpress-3-2-necesitara-mysql-5.html/feed 2
Crear RSS con PHP y MySQL http://programoweb.com/crear-rss-con-php-y-mysql.html http://programoweb.com/crear-rss-con-php-y-mysql.html#comments Wed, 05 May 2010 18:08:47 +0000 JuanK http://www.blooging.net/?p=1424 En Desarrollo Web encontramos un excelente tutorial sobre como crear un RSS con PHP y MySQL, para que tu feed se actualize dinámicamente y no debas darte el trabajo de actualizarlo a mano. En el tutorial nos muestran los pasos a seguir y el script para hacerlo facilmente.

]]>
http://programoweb.com/crear-rss-con-php-y-mysql.html/feed 4
Excluír Categorías del Loop de WordPress http://programoweb.com/excluir-categorias-loop-wordpress.html http://programoweb.com/excluir-categorias-loop-wordpress.html#comments Wed, 17 Mar 2010 17:58:46 +0000 JuanK http://www.blooging.net/?p=1366 Tal vez, como yo, tengas la necesidad de excluír una categoría del index de tu blog, o de cualquier sección de el. Yo lo hago para no mostrar los miniposts en el mismo lugar que los posts normales.

Hacerlo es muy simple, pero debemos conocer el ID de cada  categoría que queramos excluír. Si no sabes como puedes ver este post. No uses el método que se muestra en ese post para excluír categorías, ya que no funciona, por lo menos en estas últimas versiones de WordPress. El plugin que se muestra tampoco lo usen, aunque funciona con la última versión, lo único que hará será sobrecargar nuestra BD.

Para excluír categorías del index, debemos abrir nuestro archivo index.php y buscar la siguiente línea:

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

Ahora debemos incluír esta justo arriba de la anterior:

<?php query_posts($query_string . '&cat=-3,-8'); ?>

Donde 3 y 8 son los ID's que queremos excluír. El signo negativo (-) quiere decir que se excluirá, si no lo ponemos, se mostrarán sólo los posts que estén en esa categoría.

Vía: Codex de WordPress

]]>
http://programoweb.com/excluir-categorias-loop-wordpress.html/feed 6
Guardar resultados de busqueda de Google CSE http://programoweb.com/guardar-resultados-de-busqueda-de-google-cse.html http://programoweb.com/guardar-resultados-de-busqueda-de-google-cse.html#comments Sun, 07 Mar 2010 01:15:19 +0000 JuanK http://www.blooging.net/?p=1360 Luego de varios días sin actualizar, un poco de culpa la tiene el terremoto en chile, se me ocurrió hacer esto.

La idea era utilizar el motor de busqueda de Google, Google Busqueda Personalizada (Google Custom Search o CSE para los entendidos), para un sitio que no utiliza base de datos para guardar los datos, de esta forma podía tener un buscador interno de forma sencilla y rápida.

Al lograr hacer que el buscador funcionará de forma correcta (fue difícil, ya que las páginas no estaban indexadas en Google), quise hacer algo para conocer que era exactamente lo que buscan los usuarios, para eso necesitaba conocer los datos del buscador, algo que Google no nos deja hacer.

Pero encontré una solución, rápida y efectiva de hacer esto, utilizando una base de datos para guardar las busquedas realizadas y cuantas veces fué buscado algún término. Con esto se puede hacer un sitio muy completo y lo mejor es que tengo todos los datos que quería desde un principio.

Lo primero que debemos hacer es crear un buscador, con la opción de Iframe, para que los datos se guarden en nuestro hosting.

Eso es todo, ahora sólo tenemos que crear las tablas necesarias en nuestra base de datos:

CREATE TABLE `query` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`query` VARCHAR(255) NOT NULL DEFAULT '',
`DATETIME` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM

Ahora sólo debemos usar el siguiente código para recolectar los datos:

<?php
/*-----------------------
Conectarse con la Base de Datos
-------------------------*/

$dbhost = "localhost";
$dbname = "nombre";
$dbuser = "usuario";
$dbpass = "contraseña";
$db=mysql_connect($dbhost, $dbuser, $dbpass);
if ($db==FALSE)
die("Error al intentar conectar a la Base de Datos ".mysql_error());
mysql_select_db($dbname ,$db);
/*------------------------------
Guardar términos de busqueda
-------------------------------*/

$querystat = mysql_real_escape_string($_GET['q']);
$datetime = time();
if( ($querystat != $_SESSION['prev_search']) OR ( ($dataora - $_SESSION['dataora'])> 60) ) {
$insertquery = "INSERT INTO `query` ( `query` , `datetime`) VALUES ( '$querystat' , '$datetime');";
mysql_query($insertquery, $db);
}
$_SESSION['datetime'] = $datetime;
$_SESSION['prev_search'] = $querystat;
?>

Debemos pegarlo en la página donde se muestran los resultados de nuestro buscador.

Parece complicado pero es muy simple una vez que lo entiendes.

Si quieres ver cómo funciona lo que hice, puedes entrar aquí y hacer una busqueda y luego entrar en la página que dice "Busquedas". Incluso pude hacer una página con el Top de Busquedas realizadas.

Si quieres darle crédito a alguien por este excelente hack del buscador, hazlo en esta página:

Enlace: How to save search queries on Google Custom Search Engine

]]>
http://programoweb.com/guardar-resultados-de-busqueda-de-google-cse.html/feed 4
Mostrar contenido de un Feed http://programoweb.com/mostrar-contenido-de-un-feed.html http://programoweb.com/mostrar-contenido-de-un-feed.html#comments Sat, 19 Dec 2009 00:48:18 +0000 JuanK http://www.blooging.net/?p=1300 Mostrar Feed

Ya hemos visto varias formas para mostrar el contenido de un feed en cualquier lugar del blog, pues ahora veremos otra forma que es mucho más efectiva y rápida, utilizando WordPress.

Este método lo tengo implementado en la sección "Blogs  de Ayuda" desde hace unos días y realmente funciona mucho más rápido que utilizando FeedBurner.

Podemos hacerlo de 3 formas, una donde sólo mostraremos el título del post con su url, mostrar el título y un extracto del contenido o mostrar el título y todo el contenido.

Para mostrar sólo el título utilizaremos este código:

<?php if(function_exists('fetch_feed')) {

    include_once(ABSPATH.WPINC.'/feed.php');
    $feed = fetch_feed('http://feeds2.feedburner.com/Ayuda-Blogs');

    $limit = $feed->get_item_quantity(7); // Especificar el número de links
    $items = $feed->get_items(0, $limit); // Crea un "array" con los links

}
if ($limit == 0) echo '<div>No hay artículos en el feed o es inaccesible.</div>';
else foreach ($items as $item) : ?>

<div class="titulo">
    <li><a href="<?php echo $item->get_permalink(); ?>"
      title="<?php echo $item->get_title(); ?> | <?php echo $item->get_date('j F Y'); ?>">
        <?php echo $item->get_title(); ?>
    </a></li>
</div>
<?php endforeach; ?>

Para mostrar el título y un extracto utilizaremos este otro código:

<?php if(function_exists('fetch_feed')) {

    include_once(ABSPATH.WPINC.'/feed.php');
    $feed = fetch_feed('http://feeds2.feedburner.com/Ayuda-Blogs');

    $limit = $feed->get_item_quantity(7); // Especificar el número de links
    $items = $feed->get_items(0, $limit); // Crea un "array" con los links

}
if ($limit == 0) echo '<div>No hay artículos en el feed o es inaccesible.</div>';
else foreach ($items as $item) : ?>

<div class="titulo">
    <li><a href="<?php echo $item->get_permalink(); ?>"
      title="<?php echo $item->get_title(); ?> | <?php echo $item->get_date('j F Y'); ?>">
        <?php echo $item->get_title(); ?>
    </a></li>
</div>
<div class="extracto">
    <?php echo substr($item->get_description(), 0, 200); ?>
    <span>[...]</span>
</div>

<?php endforeach; ?>

Podemos elegir la extensión que tendrá el extracto en caracteres, que por defecto trae 200 y que puedes modificar donde dice:

<?php echo substr($item->get_description(), 0, 200); ?>

Y por último podemos mostrar el título y el contenido del feed completo, utilizando este código:

<?php if(function_exists('fetch_feed')) {

    include_once(ABSPATH.WPINC.'/feed.php');
    $feed = fetch_feed('http://feeds2.feedburner.com/Ayuda-Blogs');

    $limit = $feed->get_item_quantity(7); // Especificar el número de links
    $items = $feed->get_items(0, $limit); // Crea un "array" con los links

}
if ($limit == 0) echo '<div>No hay artículos en el feed o es inaccesible.</div>';
else foreach ($items as $item) : ?>

<div class="titulo">
    <a href="<?php echo $item->get_permalink(); ?>"
      title="<?php echo $item->get_title(); ?> | <?php echo $item->get_date('j F Y'); ?>">
        <?php echo $item->get_title(); ?>
    </a>
</div>

<div class="contenido">
    <p><?php echo $item->get_content(); ?></p>
</div>

<?php endforeach; ?>

Este último muestra el artículo completo, siempre y cuando el feed esté configurado para mostrarse completamente, ya que algunos sólo muestran extractos.

Para modificar el feed que se mostrará deben modificar la tercera línea y agregar el feed que quieran, en este caso se muestra el de Blogs de Ayuda.

]]>
http://programoweb.com/mostrar-contenido-de-un-feed.html/feed 5
Añadir estilo a la etiqueta “more” en WordPress http://programoweb.com/anadir-estilo-a-la-etiqueta-more-wordpress.html http://programoweb.com/anadir-estilo-a-la-etiqueta-more-wordpress.html#comments Fri, 28 Aug 2009 19:41:38 +0000 JuanK http://www.blooging.net/?p=1178 Es muy común el uso de la etiqueta "more" en WordPress, por lo mismo es muy útil agregarle estilo a esta etiqueta para mejorar la visualización de nuestro sitio.

Para hacerlo solo debemos modificar un poco el fichero index.php, o donde sea que se muestre esta etiqueta.

Primero que todo haz una copia de tu archivo index.php por si algo sale mal, ahora empezaremos por modificar una línea:

<?php the_content(); ?>

No necesariamente será identica a esa, pero sí será similar.

Ahora podemos agregar un texto, para personalizarlo un poco:

<?php the_content('Seguir leyendo...'); ?>

Por último podemos agregarle estilos CSS para personalizarlo aún más, para eso utilizaremos la etiqueta :

<?php the_content(__('<span class="more">Seguir leyendo...</span>'));?>

Para agregarle estilo usaremos el siguiente CSS:

.more {font-size: 12px; background: url(dirección de imágen) 2px;}

Sólo debes probar hasta que encuentres un estilo acorde a tu diseño.

]]>
http://programoweb.com/anadir-estilo-a-la-etiqueta-more-wordpress.html/feed 2
Listar Archivos .php con PHP http://programoweb.com/listar-archivos-php-con-php.html http://programoweb.com/listar-archivos-php-con-php.html#comments Sat, 16 May 2009 23:01:23 +0000 JuanK http://www.blooging.net/?p=1126 De hace unos días que estoy alejado del blog, un poco de flojera y otro porque estoy trabajando en una página hecha en PHP.

Mientras lo estaba haciendo se me ocurrió tener una página que mostrara todos los archivos de ese directorio, en este caso son letras de  canciones. La idea es mostrar todas las canciones dentro del directorio en forma de lista, usando un título legible con un enlace hacia la canción. Es una especie de mapa de web automático.

Esta lista se encuentra ordenada alfabéticamente utilizando como nombre la url del archivo, ejemplo:

http://www.mipagina.com/mi-página-personal.php

Este script generará automáticamente un título sin guiones, ya que los reemplaza por espacios automáticamente. En la lista se mostraría de esta forma:

  • Mi Pagina Personal

Automáticamente cada palabra empezará con mayúscula.

El código utilizado lo conseguí gracias a la página oficial de php, utilizando la variable opendir().

Este es el código utilizado:

<?php
    // read all php file in the current directory
    if ($dh = opendir('./')) {
        $files = array();
        while (($file = readdir($dh)) !== false) {
            if (substr($file, strlen($file) - 4) == '.php') {
                array_push($files, $file);
            }
        }
        closedir($dh);
    }

    // Sort the files and display
    sort($files);
    echo "<ul>\n";
    foreach ($files as $file) {
        $title = Title($file);
        echo "<li><a href=\"$file\" title=\"$title\">$title</a></li>\n";
    }
    echo "</ul>\n";

    // Function to get a human readable title from the filename
    function Title($filename) {
        $title = substr($filename, 0, strlen($filename) - 4);
        $title = str_replace('-', ' ', $title);
        $title = ucwords($title);
        return $title;
    }
?>

No tengo como mostrarles una demo por el momento, pero les aseguro que funciona, el único problema, según yo, es que en la lista también se muestra un link hacia el archivo que contiene este código, pero es lo de menos ;)

Espero que me haya quedado entendible :B

]]>
http://programoweb.com/listar-archivos-php-con-php.html/feed 0
Posts Aleatorios en WordPress http://programoweb.com/posts-aleatorios-en-wordpress.html http://programoweb.com/posts-aleatorios-en-wordpress.html#comments Wed, 25 Mar 2009 20:09:16 +0000 JuanK http://www.blooging.net/?p=1071

Haciendo modificaciones al diseño del blog, se me ocurrió mostrar posts aleatorios en la sidebar, pero de todos los que probé ninguno me funcionó.

Luego de unos 15 minutos trabajando logré crear un código que muestra post aleatorios, lo logré crear leyendo claramente los Template Tags en el  Codex de WordPress.

El código es el siguiente:

<h4>Posts Aleatorios</h4>
<?php
 $postslist = get_posts('numberposts=7&order=ASC&orderby=rand');
 foreach ($postslist as $post) :
    setup_postdata($post);
 ?>
 <div>
 <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
 </div>
 <?php endforeach; ?>

El numero de posts se puede cambiar modificando la siguiente línea: numberpost=7

Si quisieran que aparecieran todos los post menos los de una categoría en concreto, usen el siguiente código:

<h4>Posts Aleatorios</h4>
 <?php
 $postslist = get_posts('numberposts=7&order=ASC&orderby=rand&category=-142');
 foreach ($postslist as $post) :
    setup_postdata($post);
 ?>
 <div>
 <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
 </div>
 <?php endforeach; ?>

El único cambio en este código es: category=-142, que significa que se mostrarán todas las entradas, menos las de la categoría Asides, osea la que tiene la ID 142. Recuerda que en tu blog la ID será distinta.

Deben pegarlo en el lugar que más les convenga, que normalmente sería en la sidebar.

Pueden ver en funcionamiento este script en mi sidebar, en "Posts Aleatorios".

Espero les sirva ;)

]]>
http://programoweb.com/posts-aleatorios-en-wordpress.html/feed 1