Grupo de publicación personalizada en una página por su etiqueta taxonómica

2

Espero poder escribir una pregunta clara ya que me confundí al intentar resolver esto ...

Obtuve un tipo de publicación personalizado ... ese tipo de publicación personalizada tiene taxomony (categoría like)
y quiero devolver una estructura como esta en una página que muestre todas las publicaciones de
ese tipo de publicación ..

--------------------------------------------- ESTUDIO DESEADO

nombre de categoría de taxonomía (ejemplo: nueva york)
  - post uno (asociado a la categoría de nueva york)
  - post dos (asociado a la categoría de nueva york)
  - puesto tres (asociado a la categoría de nueva york)

nombre de categoría de taxonomía (Ejemplo: Washington DC)
  - post uno (asociado a la categoría de Washington DC)
  - post dos (asociado a la categoría de Washington DC)
  - puesto tres (asociado a la categoría de Washington DC)
  - puesto cuatro (asociado a la categoría de Washington DC)
  - post Cinco (asociado a la categoría de Washington DC)

nombre de categoría de taxonomía (Ejemplo: SomeCity)
  - publicar uno (asociado a la categoría de SomeCity)
  - publicar dos (asociado a la categoría de SomeCity)

Este es el código que tengo ahora:

        <div class="pageContent portfolioPage">

            <!--=STR== PAGE TITLE ===-->
            <?php if (have_posts()) : ?>
            <?php while (have_posts()) : the_post(); ?>   
                <h1 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h1>
                <?php the_content(); ?>
            <?php endwhile; endif; ?>
            <!--=END== PAGE TITLE ===-->

            <!--=STR== OUR CLIENTS ===-->                   
            <?php 
            /*
                query_posts(array( 
                    'post_type' => 'vacationrental',
                    'showposts' => 100
                ) );  
            */
            $loop = new WP_Query( array( 
            'post_type' => 'vacationrental',
            'post_per_page' => 100,
            'orderby' => 'date',
            'order' => 'ASC'
            ));             

            ?>


            <?php while ($loop->have_posts()) : $loop->the_post(); ?>
                <div class="vacationRentalBox">
                    <div class="vacationRentalBox-inner">

                        <?php
                        $image_id = get_post_thumbnail_id();  
                        $image_url = wp_get_attachment_image_src($image_id,'large');  
                        $image_url = $image_url[0];  
                        // $googleMapsUrl = get_post_meta( $post->ID, 'vacationrental_map', true ); // GOOGLE MAPS URL
                        ?>              

                        <div class="vacationRentalBar">
                            <div class="vacationRentalName"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div> 

                            <div class="thumbsingle">
                            <a title="<?php the_title(); ?>" href="<?php echo $image_url; ?>" class="lightbox"><?php the_post_thumbnail('testimonialPage'); ?></a>
                            </div>      

                            <div class="vacationRentalDescription"><?php dynamic_excerpt(315); ?></div> 

                            <div class="vacationRentalExtraInfo">
                                <div class="vacationRentalReadMore"><a href="<?php the_permalink(); ?>" rel="nofollow"><?php _e('Read More &rarr;' ,'sagive'); ?></a></div>                             
                            </div>
                            <br style="clear: both;" />
                        </div>

                    </div>
                </div>

            <?php endwhile;?>
            <!--=END== OUR CLIENTS ===-->                           

            <br style="clear: both;" />
        </div>

.
Logré obtener la lista de categorías de taxomonies usando esto:

$terms = get_terms("locations");
$count = count($terms);
if ( $count > 0 ){
    echo "<ul>";
    foreach ( $terms as $term ) {
    echo "<li>" . $term->name . "</li>";

    }
    echo "</ul>";
}

Pero no sé cómo integrarlo en el bucle / estructura Realmente agradecería tu ayuda ya que estoy atascado ...

    
pregunta Sagive SEO 06.01.2012 - 06:46

2 respuestas

4

Si sigo tu pregunta correctamente, puedes usar un bucle de consulta anidado, es decir, repasar los términos de tu taxonomía y luego hacer un bucle WP_Query para cada uno.

Hay un enfoque más complicado al usar SQL personalizado y un filtro, pero el siguiente ejemplo es para lo que me gustaría ir:

$terms = get_terms("locations");
$count = count($terms);
if ( $count > 0 ){
    foreach ( $terms as $term ) {
        echo '<h2>' . $term->name . '</h2>';
        echo '<ul>';
        $loop = new WP_Query( array( 
            'post_type' => 'vacationrental',
            'post_per_page' => 100,
            'orderby' => 'date',
            'order' => 'ASC',
            'tax_query' => array(
                array(
                    'taxonomy' => 'locations',
                    'field' => 'id',
                    'terms' => $term->term_id
                )
            )
        ));
        // the loop
        while ($loop->have_posts()) : $loop->the_post();
            // do loop content
            echo '<li>' . get_the_title() . '</li>';
        endwhile;
        // reset $post so that the rest of the template is in the original context
        wp_reset_postdata();
        echo '</ul>';
    }
}
    
respondido por el sanchothefat 09.01.2012 - 16:27
1

ok, esto es viejo y tienes una solución, pero estaba tratando de hacer lo mismo. aquí es cómo terminé haciéndolo con vudú de SQL parcheado desde un par de lugares, pero principalmente:

Es posible usar wp_query ¿Para ordenar por taxonomía? y

cómo para agrupar publicaciones de tipo de publicación personalizada por términos de taxonomía personalizada

primero la consulta vudú:

function wpa_38075( $clauses, $wp_query ) {
    global $wpdb;

    if( !is_post_type_archive( 'vacationrental' )) return $clauses;


        //join term_relationships to posts, and term_relationships to term_taxonomy and term_taxonomy to terms
        $clauses['join'] .= "LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
LEFT OUTER JOIN {$wpdb->terms} USING (term_id)" ;

        //look for posts with and without a subject term
        $clauses['where'] .= " AND (taxonomy = 'locations' OR taxonomy IS NULL)";

        $clauses['groupby'] = "object_id";

        //remove limits
        $clauses['limits'] = "";

        //group posts by term name
        $clauses['orderby']  = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) ";

    return $clauses;
}


add_filter( 'posts_clauses', 'wpa_38075', 10, 2 );

y luego en tu plantilla:

<?php 

$prev = ''; //not set yet

if (have_posts()) :

    echo "<ul>";

while ( have_posts() ) : the_post();  


    $subhead =  array_shift(wp_get_post_terms(get_the_ID(), 'subject', array("fields" => "names")));
    $subhead = $subhead ? $subhead : __('Uncategorized','yourtextdomain');

    if($subhead != $prev) { ?>
        <h3 class="subhead"><?php echo $subhead;?></h3>
    <?php } ?>

    <li><a href="<?php echo get_permalink();?>" title="<?php echo __('Permalink to', 'peterwade') . ' ' . get_the_title();?>"><?php the_title();?></a></li>

    <?php 

    $prev = $subhead; //cache the previous tax term

endwhile; 
echo "</ul>";
endif;
?>
    
respondido por el helgatheviking 17.07.2012 - 21:59

Lea otras preguntas en las etiquetas