Cómo llamar categorías de taxonomía personalizada con shortcodes

12 may 2011, 07:10:20
Vistas: 17.3K
Votos: 2

Acabo de resolver una pregunta aquí: Cómo mostrar posts de una sola categoría dentro de una taxonomía personalizada

Ahora me pregunto cómo tomar este código:

<?php
    $args = array(
        'posts_per_page' => 1,
        'post_type' => 'inventory',
        'tax_query' => array(
            array(
                'taxonomy' => 'inventory-category',
                'field' => 'slug',
                'terms' => array( 
                    'bulk-racks' 
                )
            )
        )       
    );
query_posts( $args ); while ( have_posts() ): the_post();

// hacer cosas aquí
?>

<?php endwhile; ?>

y llamarlo usando shortcodes, por ejemplo para mostrar la categoría bulk-racks usando algo como [inventory-category="bulk-racks"]

Sé cómo crear un shortcode básico pero no sé cómo escribir la función que devolvería los posts basados en el nombre de categoría ingresado en el shortcode.

Una vez más, cualquier ayuda sería muy apreciada.

2
Comentarios

De hecho, marcar soluciones es una cuestión de respetar el tiempo invertido en tu tarea por otros usuarios.

kaiser kaiser
12 may 2011 14:04:20

Gracias chicos, he aceptado la primera respuesta, culpa mía por no leer las preguntas frecuentes correctamente. Aún así, fue un poco duro votar negativamente mi pregunta válida ya que podría ayudar a otros.

maikunari maikunari
12 may 2011 16:34:23
Todas las respuestas a la pregunta 1
6

Echa un vistazo al shortcode de categoría de posts para tener una idea y aquí está el plugin con modificaciones menores para llamar a tu tipo de post y taxonomía:

// Shortcode de categoría de taxonomía
function cat_func($atts) {
    extract(shortcode_atts(array(
            'class_name'    => 'cat-post',
            'totalposts'    => '-1',
            'category'      => '',
            'thumbnail'     => 'false',
            'excerpt'       => 'true',
            'orderby'       => 'post_date'
            ), $atts));

    $output = '<div class="'.$class_name.'">';
    global $post;
    $args = array(
        'posts_per_page' => $totalposts, 
        'orderby' => $orderby,
        'post_type' => 'inventory',
        'tax_query' => array(
            array(
                'taxonomy' => 'inventory-category',
                'field' => 'slug',
                'terms' => array( $category)
            )
        ));
    $myposts = NEW WP_Query($args);


    while($myposts->have_posts()) {
        $myposts->the_post();
        $output .= '<div class="cat-post-list">';
        if($thumbnail == 'true') {
        $output .= '<div class="cat-post-images">'.get_the_post_thumbnail($post->ID, 'thumbnail').'</div>';
        }
        $output .= '<div class="cat-content"><span class="cat-post-title"><a href="'.get_permalink().'">'.get_the_title().'</a></span>';
        if ($excerpt == 'true') {
            $output .= '<span class="cat-post-excerpt">'.get_the_excerpt().'</span>';
        }
        $output .= '</div>
            <div class="cat-clear"></div>
        </div>';
    };
    $output .= '</div>';
    wp_reset_query();
    return $output;
}
add_shortcode('inventory-category', 'cat_func');

uso:

simplemente coloca este shortcode en tus posts o páginas

[inventory-category totalposts="3" category="bulk-racks" thumbnail="true" excerpt="true" ]
  • totalposts - número total de posts a mostrar. Por defecto es -1
  • category - slug de la categoría. Usa comas , para múltiples slugs
  • thumbnail - establece true si quieres mostrar la miniatura. Por defecto es false
  • excerpt - establece true si quieres mostrar el extracto. Por defecto es true
  • orderby - orden de los posts. Por defecto post_date. Revisa http://codex.wordpress.org/Template_Tags/get_posts para más detalles
12 may 2011 09:13:47
Comentarios

¡Muchas gracias Bainternet, voy a probar esto ahora mismo!

maikunari maikunari
12 may 2011 16:35:19

Me aparece un error fatal: Error fatal: Tamaño de memoria permitido de 33554432 bytes agotado (se intentó asignar 17301490 bytes) en \wp-content\themes\ECSE\functions\inventory-shortcode.php en la línea 30. ¿Alguna idea de cuál podría ser el problema? Por cierto, esta es la línea 30 "$output .= '<div class="cat-post-list">';"

maikunari maikunari
12 may 2011 19:56:56

Supongo que se está agotando la memoria

Bainternet Bainternet
12 may 2011 20:22:37

¿Crees que podría ser causado por el lento alojamiento de Go Daddy que mi cliente está usando?

maikunari maikunari
12 may 2011 20:42:31

Creo que tiene que ver con la configuración de memoria del servidor

Bainternet Bainternet
12 may 2011 21:46:49

Actualización rápida: no pude hacer que esto funcione sin el error de memoria agotada, lo intenté en diferentes hosts también. Terminé sin usar el shortcode. Pero gracias de todos modos.

maikunari maikunari
17 may 2011 20:31:43
Mostrar los 1 comentarios restantes