Tags para los Custom Post Types

nube de tags

Ya existe mucha documentación sobre cómo crear taxonomías y cómo usarlas en los custom post types, pero… ¿cómo usar las taxonomías que usa WordPress por defecto? A esta pregunta no existe mucha documentación, y menos en español. Por esto, he decidido volver a escribir en TodoWP y hacer un pequeño manual de cómo usar específicamente tags en un tipo de post personalizado.

Los ingredientes para lograrlo son:

  1. La definición o declaración del post type
  2. La conexión del tipo de post con la taxonomía
  3. El cambio en el query por defecto

Lo primero es tener el custom post type:

register_post_type('alojamiento',
array(
'labels' => array(
'name' => 'Alojamientos',
'singular_name' => 'Alojamiento'
),
'capability_type' => 'post',
'public' => true,
'supports' => array('title','editor'),
'taxonomies' => array('post_tag')
)
);

Este es un ejemplo básico de cómo se registra un post type, lo importante en este ejemplo es la linea donde se registran las posibles taxonomías para este tipo.

'taxonomies' => array('post_tag')

Nota: en esta parte no es necesario poner todas las taxonomías que se usarían. Luego se pueden crear taxonomías personalizadas para usarlas con este tipo de post.

tags

Hasta el momento aun no ponemos usarla, ¿por qué? Porque el editor no nos mostrará la caja que permite agregar las etiquetas. Para esto nuestro segundo ingrediente.


register_taxonomy_for_object_type('post_tag', 'alojamiento');

Esta última linea se coloca también en la acción init, al igual que el register_post_type. Hasta el momento todo funciona perfecto, podemos crear custom post y asignarles etiquetas. Incluso si agregamos un widget con la nube de etiquetas aparecerán las que hayamos creado y nos indicará cuántos posts tienen esa etiqueta.

Pero aún hay un problema: si en esa nube de etiquetas entramos a ver el listado de posts no veremos los de tipo especial, incluso aparecerán los posts normales, pero no los especiales.

Para esto nuestro tercer ingrediente. El problema radica en que el query que internamente tiene WordPress en el momento de solicitar los contenidos que se pasan a la plantilla para ser mostrados no incluye los post types.


function agregar_los_custom_posts($query)
{
if(is_tag() && empty($query->query_vars['suppress_filters']))
{
$post_types = array('post', 'alojamiento');
$query->set('post_type', $post_types);
return $query;
}
}
add_filter( 'pre_get_posts', 'agregar_los_custom_posts' );

Este filtro logra agregar nuestro o nuestros tipos al query en caso necesario.

Espero que esto les ayude cuando estén en sus desarrollos. Comenten sus resultados.

Como cambiar los emoticonos de WordPress (parte 2)

Ayer descubrí que desde la última actualización había perdido mis smilies personalizados, a juego con mi tema. Buscando por aquí sólo aparecía esta otra entrada, así que a currar ...

Para el que le interese que cada vez que se actualice WordPress no se pierdan sus smilies personales dejo mi solución.

Primero creo una carpeta "smilies" en la carpeta wp-content porque esta última carpeta no sufre actualizaciones.

En el fichero del tema /wp-content/themes/NOMBREdelTEMA/functions.php creo una función para las entradas y otra para los comentarios.

Para entradas

function mis_smilies1($text) {
$text = str_replace('wp-includes/images/smilies/icon_','wp-content/smilies/icon_', $text);
return $text;
}
add_filter('the_content', 'mis_smilies1');

Para los comentarios

function mis_smilies($text) {
$text=convert_smilies( convert_smilies( $text) );
$text = str_replace('wp-includes/images/smilies/icon_','wp-content/smilies/icon_', $text);
return $text;
}
add_filter('comment_text', 'mis_smilies');

Explicaciones:

(más...)

Retargeting, un paso más en la publicidad online


Como ya comenté hace semanas, estoy inmerso en el “Programa Avanzado de Marketing online” impartido por Secuoyas Academy, un curso que además de enseñar bastante sobre marketing online, me está dando el privilegio de conocer a grandes profesionales del sector, que nos cuentan su día a día, sus casos de éxito y sus creencias en cuanto a tendencias en publicidad online. Entre muchas temáticas me gustó bastante la visión del display con retargeting.

Ya han pasado cuatro semanas desde que comencé este curso de Marketing Online, semanas que están siendo frenéticas, pues el trabajo aprieta de lunes a jueves, y los viernes tengo que viajar a Madrid para asistir a las clases viernes y sábado; pero ante todo está siendo muy provechoso y estamos disfrutando de grandes charlas con muy buenos profesionales como Lakil Essady (Nurun) que nos brindó una buena clase de SEO, Roberto Carreras e Isabel Ramis (@yayel) con Social Media ó Nacho Carnés con una gran clase y unas posteriores cañitas con una charla muy interesante con varios compañeros de curso.

Con diez días de retraso hoy comento la grata impresión de la clase de Display con Nacho Carnés, y en especial el concepto de retargeting basado en la generación de impactos de valor y calidad para el usuario en base a su comportamiento anterior y consiguiendo así una afinidad mucho mayor entre usuario y anuncio en la búsqueda de generar interés hacia una acción del usuario sobre la publicidad mediante clicks, ventas, visitas, registros, fidelización, etc…

En sí el concepto es muy simple hasta ofensivo de la simplicidad que aplica; al recordarlo me viene a la cabeza un simple ejemplo de la similitud con un comercio tradicional, pues al igual que un tendero de una tienda de barrio te ofrece los productos que te suelen interesar a la voz de “¿no quieres hoy tomates? ¿te vas a llevar pollo?” sabedor de tu interés habitual en esos productos, las campañas de display a través de las cookies que guardan tags con información de comportamientos del usuario, nos permiten que los adservers muestren anuncios personalizados según comportamientos anteriores, preferencias y gustos.

El tendero guarda los tags (mis gustos habituales sobre consumo) en sus cookies particulares (en su cabeza inserta ese recuerdo) para después mostrarme campañas de retargeting (me ofrece los productos que sabe que me interesan) para intentar optimizar opciones de ventas.

Original Post / Entrada Original: Carrero.es. Si quieres Juegos Gratis disfruta aquí o decora tu casa.

Retargeting, un paso más en la publicidad online

Mostrar artículos relacionados con un shortcode

Los shortcodes, introducidos en la versión 2.5 de WP, son una manera fácil de añadir en el editor HTML de WordPress diferentes funcionalidades, como las galerías de imágenes, la activación de tal ciertos plugins sólo para la ocasión (adición de tablas, formularios de contacto, botones de compra, …), etc.

Hoy vamos a pegar un código en functions.php que nos permitirá mostrar una lista de artículos relacionados siempre y cuando hayamos incluído cierto shortcode al final del artículo que estemos escribiendo escribiendo.

Copiar y pegar

Guardamos y regresamos a nuestros artículos. A los que les añadamos este shortcode

     [related_posts]

…mostrarán una lista de relacionados, basada en las etiquetas.

El shortcode lo podemos emplazar (he ahí otra ventaja además del poder escoger artículo a artículo si lo usamos o no) allí donde queramos: principio, mitad o final del post.

Listar artículos por frecuencia de tags en varias listas

Siempre es interesante que en nuestra web uno pueda sacar el máximo provecho al trabajo de clasificación realizado en la Administración. Una de las formas para lograr rendimiento es a través de las etiquetas, a las que hoy daremos un uso especial.

Vamos a listar 10 columnas. Cada una de ellas empieza con las 10 etiquetas más usadas en la historia de nuestro site, y dispone luego títulos de artículos etiquetados con ellas:

<?php
      $noOfTags = 10;
      $noOfPosts = 4;

      $cloudRight = get_tags("orderby=count&order=DESC&number=$noOfTags");
      foreach((array)$cloudRight as $tagRight) : ?>

          <?php
          $postsRight = new WP_Query();
          $postsRight->query("tag={$tagRight->slug}&showposts=$noOfPosts");
          ?>
          <?php if ( $postsRight->have_posts() ) :?>
            <dl class="xoxo">
              <dt><?php echo $tagRight->name ?></dt>

              <?php while ( $postsRight->have_posts() ) : $postsRight->the_post(); ?>
              <dd><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></dd>
              <?php endwhile;?>

            </dl>
          <?php endif; ?>           

      <?php
          unset($postsRight);
      endforeach; ?>

Llamamos a la nube de tags general y le pedimos el nombre de los 10 más usados. Para cada resultado lanzamos un loop que nos da título de etiqueta y 4 artículos asociados en una tabla.

Estos dos números, 10 etiquetas y 4 artículos de cada, pueden ser por supuesto modificados como mejor nos convenga. Si preferís usar listas en vez de tablas, sólo tenéis que cambiar los dl por ul, y los dt y dd por li, con algún encabezado h3 para las etiquetas.

Luego habría que darle anchura a cada lista con CSS para dar el formato de columna.

Esperamos que os sea útil este truco. ¡No dudéis en comentar!

Obtener etiquetas de una cierta (o ciertas) categoría(s)

Si queremos, en algún espacio de nuestros templates (en los archivos, el índice, single.php…), proponer un conjunto de etiquetas que reúnan posts no sólo marcados con ellas, sino que pertenezcan a una misma categoría, tenemos aquí el código para conseguirlo.

Abriremos functions.php y pegaremos lo siguiente: (copiar y pegar)

A partir de aquí, en nuestro template (por ejemplo, index.php), escogeremos el lugar que creamos más conveniente para nuestras etiquetas y escribiremos la llamada a la función:

   $args = array('categories' => '12,13,14');
   $tags = get_category_tags($args);

Por supuesto, deberemos poner los tags de apertura y cierre de PHP.

De este modo, vamos a reunir etiquetas que hayan sido usadas en artículos bajo las categorías con ID 12, 13 y 14. La identidad numérica de cada categoría la sabremos sobrevolándola con el cursor del ratón en nuestro panel de Administración.

Créditos: foros de WordPress.org

Loop: obtener etiquetas con get_posts

Cuando en WordPress nos interesa tener varios loops en una página (por ejemplo, para mostrar varias columnas, una por categoría), una de las más fáciles maneras de conseguirlo es con get_posts:

<?php
$posts = get_posts('category=vinos-blancos&numberposts=1');
foreach($posts as $post):
setup_postdata($post);
?>
<?php the_title(); ?>
<?php the_content(); ?>
<?php endforeach; ?>

En este ejemplo, estamos convocando a un artículo (numberposts=1), el último artículo que hayamos escrito de hecho, dentro de la categoría "Vinos Blancos".

Sucesivamente, en cada columna de nuestro index.php donde quisiéramos que ello ocurriera podríamos cambiar la categoría por una nueva, y disponer así de cuatro o cinco columnas por categoría (siguiendo el ejemplo: vinos blancos, vinos tintos, vinos rosados, champagne, licores…).

Si quisiéramos, sin embargo, disponer además de las etiquetas; por ejemplo, "afrutado", "seco", "fuerte", deberemos realizar un añadido especial en nuestro loop:

<?php
$posts = get_posts('category=4&numberposts=1');
foreach($posts as $post):
setup_postdata($post);
?>

<?php the_title(); ?>
<?php the_content(); ?>

<?php $posttags = get_the_tags($post->ID); if ($posttags) {
foreach($posttags as $tag) {
echo '<a href="';
echo get_tag_link($tag);
echo '">';
echo $tag->name . ' ';
echo '</a>';
}
}
?>
<?php endforeach; ?>

Como get_posts es un tipo de loop más sencillo que el normal de WordPress, necesitaremos especificar la ID numérica de cada post ($post->ID) para que WordPress nos dé, además de título y contenido, las etiquetas correspondientes enlazadas a sus archivos de etiqueta como en este caso.

Esperamos que este truco os sea útil y vuestros comentarios.

Todas nuestras etiquetas en una lista desplegable

Si no tenemos un número excesivo de etiquetas y las quisiéramos desplegar en una lista, aquí tenemos el código para realizarlo.

Primero, iremos a functions.php o lo crearemos como simple archivo de texto y pegaremos en su interior el siguiente código:

<?php
function dropdown_tag_cloud( $args = '' ) {
$defaults = array(
'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC',
'exclude' => '', 'include' => ''
);
$args = wp_parse_args( $args, $defaults );

$tags = get_tags( array_merge($args, array('orderby' => 'count', 'order' => 'DESC')) ); // Always query top tags

if ( empty($tags) )
return;

$return = dropdown_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args
if ( is_wp_error( $return ) )
return false;
else
echo apply_filters( 'dropdown_tag_cloud', $return, $args );
}

function dropdown_generate_tag_cloud( $tags, $args = '' ) {
global $wp_rewrite;
$defaults = array(
'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC'
);
$args = wp_parse_args( $args, $defaults );
extract($args);

if ( !$tags )
return;
$counts = $tag_links = array();
foreach ( (array) $tags as $tag ) {
$counts[$tag->name] = $tag->count;
$tag_links[$tag->name] = get_tag_link( $tag->term_id );
if ( is_wp_error( $tag_links[$tag->name] ) )
return $tag_links[$tag->name];
$tag_ids[$tag->name] = $tag->term_id;
}

$min_count = min($counts);
$spread = max($counts) - $min_count;
if ( $spread <= 0 )
$spread = 1;
$font_spread = $largest - $smallest;
if ( $font_spread <= 0 )
$font_spread = 1;
$font_step = $font_spread / $spread;

// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
if ( 'name' == $orderby )
uksort($counts, 'strnatcasecmp');
else
asort($counts);

if ( 'DESC' == $order )
$counts = array_reverse( $counts, true );

$a = array();

$rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? ' rel="tag"' : '';

foreach ( $counts as $tag => $count ) {
$tag_id = $tag_ids[$tag];
$tag_link = clean_url($tag_links[$tag]);
$tag = str_replace(' ', '&nbsp;', wp_specialchars( $tag ));
$a[] = "\t<option value='$tag_link'>$tag ($count)</option>";
}

switch ( $format ) :
case 'array' :
$return =& $a;
break;
case 'list' :
$return = "<ul class='wp-tag-cloud'>\n\t<li>";
$return .= join("</li>\n\t<li>", $a);
$return .= "</li>\n</ul>\n";
break;
default :
$return = join("\n", $a);
break;
endswitch;

return apply_filters( 'dropdown_generate_tag_cloud', $return, $tags, $args );
}
?>

Acto seguido, iremos al template en el que nos interese insertar la lista desplegable y, orientándonos entre el HTML, pegaremos el siguiente código:

<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value="#">Tags</option>
<?php dropdown_tag_cloud('number=0&order=asc'); ?>
</select>

Nuestros tags seran ahora mostradis en un desplegable.

Referencia rápida para WordPress 2.8

referencia visual wordpress 470x249 Referencia rápida para WordPress 2.8

Antonio Lupetti ha creado una referencia visual rápida con todas la variables e información para trabajar con WordPress 2.8 de una forma ágil a la hora de programar y modificar plantillas. Incluyendo referencias a etiquetas de plantillas con código de ejemplo.

Podéis consultar la referencia online a modo de presentación o bien descargarlo desde aquí.

vía: WTC

Original Post / Entrada Original: Carrero.es. Si quieres Juegos Gratis disfruta aquí o decora tu casa.

Referencia rápida para WordPress 2.8

Chuleta (cheat sheet) de WordPress 2.8

En Woorkup.com han creado una estupenda chuleta visual de tags de plantilla y código de WordPress 2.8, que puede servir de fantástica guía de referencia para desarrolladores.

Puedes descargar la chuleta de WordPress 2.8 en PDF haciendo clic derecho (y guardar como) en la siguiente imagen …

Clic derecho y guardar como …

O visualizarla directamente aquí mismo … 

Contenido exclusivo para suscriptores al Feed

¡Gracias por seguirnos a diario!. Premiamos tu fidelidad ofreciéndote habitualmente contenidos exclusivos. Hoy puedes descargar:

Clic aquí para iniciar la descarga Guía para Administrar Wordpress

¿Te gustó este post? ¡Compártelo! Bitacoras.com TwitThis Facebook Meneame Google Bookmarks del.icio.us Live Technorati Ping.fm Wikio Turn this article into a PDF! E-mail this story to a friend! Print this article!