it-swarm.com.de

Wie kann ich von einer Taxonomieseite aus bedingt auf den Beitrag umleiten?

Ich möchte zu einem Beitrag weiterleiten, wenn dem Taxonomiebegriff, zu dem er gehört, nur ein Beitrag zugeordnet ist. Bisher habe ich Folgendes:

$term_id = get_queried_object()->term_id;
$taxonomy_name = 'product_range';
$term_children = get_term_children( $term_id, $taxonomy_name );

foreach ( $term_children as $child ) {
  $term = get_term_by( 'id', $child, $taxonomy_name );
    if($term->count <= 1 ) {
      echo '<a href="'. get_term_link($child, $taxonomy_name) .'" class="thumb" title="'.$term->name.'">'.$term->name.'</a>';
    }
}

Dieser Link führt zur Archivseite, aber ich möchte, dass der Benutzer zum entsprechenden Beitrag weitergeleitet wird. Ich bin mir nicht sicher, was ich tun muss, um den Permalink zu ändern, um zur einzelnen Beitragsseite zu gelangen.

1
Neelam Khan

@ClemC Ich konnte das herausfinden, indem ich eine WP_Query hinzufügte, um die Posts abzufragen und die Anzahl zu überprüfen. Hier ist mein Code:

    $term_id = get_queried_object()->term_id;
        $taxonomy_name = 'product_range';
        $custom_terms = get_term_children( $term_id, $taxonomy_name );
            echo '<div class="row row__condensed">';
            foreach($custom_terms as $custom_term) {
                $term = get_term_by( 'id', $custom_term, $taxonomy_name );
                wp_reset_query();
                $args = array(
                    'post_type' => 'product',
                    'posts_per_page' => 1,
                    'tax_query' => array(
                        array(
                            'taxonomy' => 'product_range',
                            'field' => 'slug',
                            'terms' => $term->slug,
                        ),
                    ),
                 );

                $loop = new WP_Query($args);

                if($loop->have_posts()) {

                    while($loop->have_posts()) : $loop->the_post();
                        // If only one post exists link to product
                        if($term->count === 1 ) {
                            echo '<div class="col-xs-12 col-md-4">';
                                echo '<div class="grid__item">';
                                    echo '<a href="'.get_permalink().'">';                                                       
                                    echo '</a>';
                                    echo '<h3><a href="' . get_permalink() . '">'.$term->name .'</a></h3>';
                                    echo '<p>'.wp_trim_words($term->description, 23, '...').'</p>';
                                echo '</div>';
                            echo '</div>';
                        }
                        //else link to the listing page
                        else {
                            echo '<div class="col-xs-12 col-md-4">';
                                echo '<div class="grid__item">';
                                    echo '<a href="' . get_term_link( $custom_term, $taxonomy_name ) . '">';                                    
                                    echo '</a>';
                                    echo '<h3><a href="' . get_term_link( $custom_term, $taxonomy_name ) . '">'.$term->name .'</a></h3>';
                                echo '<p>'.wp_trim_words($term->description, 23, '...').'</p>';
                                echo '</div>';
                            echo '</div>';
                        }
                    endwhile;
                }
            else {
        echo "no posts found.";
            } //endforeach
        echo '</div>'; 
0
Neelam Khan

Ich denke, Sie können einfach WP_Term 's $count -Eigenschaft verwenden, die die Anzahl der Beiträge enthalten sollte, die an diesen aktuellen Begriff angehängt sind.
Dann,wennnur ein Beitrag an diesen Begriff angehängt ist, frage dieses Beitragsobjekt ab und mache deine Sachen damit ...

$term = get_queried_object();

if ( $term->count === 1 ) {
    $args = array(
        'tax_query' => array(
            array(
                'taxonomy'         => 'product_range',
                'field'            => 'term_id',
                'terms'            => array( $term->term_id ),
                'include_children' => false,
            ),
        )
    );

    $query = new WP_Query( $args );
    $posts = $query->posts;
    $post  = $posts[0];

    /**
     * IMPORTANT FOR SEO...
     * Temporary redirection until your category is populated - Use 301 instead of 302 to redirect permanently...
     */
    if ( wp_redirect( get_permalink( $post->ID ), 302 ) ) {
        exit;
    }
}
0
ClemC