it-swarm.com.de

Rufen Sie den Slug für einen Begriff ab

Ich erstelle eine gemeinsame "Single Tag Page" für verschiedene Beitragstypen.
Ich verwende folgenden Code:

$loop = new WP_Query( array( 'post_type' => 'any', 'tag' => single_term_title( '', false ), 'posts_per_page' => 10 ) );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div class="entry-content">
     <?php the_excerpt(); ?>
  </div><!-- .entry-content -->
<?php endwhile; // End the loop. ?> 

Es funktioniert einwandfrei, bis kein Taxonomiekonflikt vorliegt.
Zum Beispiel:
Wenn ich Kategorien- und Tag-Namen habe - "Videos" , hat die Kategorie eine Slug - "/ videos" & Tag "/ videos-2".

Für den Fall, dass slug nicht mit dem Taxonomienamen übereinstimmt, funktioniert der obige Code nicht.
Ich benötige eine alternative Funktion für single_term_title () , etwa "single_term_slug ()" .

Irgendwelche Ideen?

P.S. Ich habe über die Funktion " get_term_by () " nachgedacht, aber ich hatte kein Glück, sie in den obigen Code zu übernehmen.

Aktualisiert: Ich habe meinen Code unten gepostet.

2
Andrew

Vielen Dank für die schnelle Antwort. Sehr geschätzt!

Hier ist der Code für die "globale" Tag-Seite (mit den Begriffen der Standard-Taxonomie "post_tag"):

<?php
$term_slug = get_queried_object()->slug;
    if ( !$term_slug )
    return;
    else  
$loop = new WP_Query( array( 'post_type' => 'any', 'tag' => $term_slug, 'posts_per_page' => 10 ) );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div class="entry-content">
    <?php the_excerpt(); ?>
  </div><!-- .entry-content -->
<?php endwhile; // End the loop. ?>  

Das nächste Codebeispiel ist eine benutzerdefinierte Taxonomieabfrage (mit Begriffen der benutzerdefinierten Taxonomie):

<?php 
//http://codex.wordpress.org/Function_Reference/WP_Query#Taxonomy_Parameters
$term_slug = get_queried_object()->slug;
        if ( !$term_slug )
        return;
        else
$args = array(
    'tax_query' => array(
                     array(
                       'taxonomy' => 'gallery_category',
                       'field' => 'slug',
                       'terms' => $term_slug,
                       'posts_per_page' => 10
                     )
                   )
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div class="entry-content">
    <?php the_excerpt(); ?>
  </div><!-- .entry-content -->
<?php endwhile; // End the loop. ?> 
7
Andrew

Es gibt einen Verweis auf den Begriff Objekt in $wp_query und eine Verknüpfungsfunktion, um dies abzurufen (sofern Sie WordPress 3.1 ausführen): get_queried_object().

Also, um die Schnecke zu bekommen, würden Sie echo get_queried_object()->slug; tun

Wenn Sie nicht mit WordPress 3.1 arbeiten, müssen Sie die get_queried_object() auf dem global $wp_query aufrufen:

global $wp_query;echo $wp_query->get_queried_object()->slug;

2
Joe Hoyle

Hier ist eine gegabelte single_term_slug() -Funktion aus single_term_title ()

function single_term_slug( $prefix = '', $display = true ) {
    $term = get_queried_object();
    if ( !$term )
    return;
    if ( is_category() )
        $term_slug = apply_filters( 'single_cat_slug', $term->slug );
    elseif ( is_tag() )
        $term_slug = apply_filters( 'single_tag_slug', $term->slug );
    elseif ( is_tax() )
        $term_slug = apply_filters( 'single_term_slug', $term->slug );
    else
        return;
    if ( empty( $term_slug ) )
        return;
    if ( $display )
        echo $prefix . $term_slug;
    else
        return $term_slug;
}
0
Bainternet