Obține slug-ul unui singur termen în WordPress

4 apr. 2011, 15:17:37
Vizualizări: 16.2K
Voturi: 3

Eu creez o "Pagină de Tag Unic" comună pentru diferite Tipuri de Postări.
Folosesc următorul cod:

$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; // Sfârșitul buclei. ?> 

Funcționează bine până când nu există conflicte între termenii taxonomiei.
De exemplu:
Dacă am Numele Categoriei & Tag-ului - "Videos", Categoria va avea slug-ul - "/videos" & Tag-ul "/videos-2".

În cazul în care slug-ul nu este același cu numele taxonomiei, codul de mai sus nu funcționează.
Am nevoie de o funcție alternativă pentru single_term_title(), ceva de genul "single_term_slug()".

Idei?

P.S. M-am gândit la funcția "get_term_by()", dar nu am reușit să o adaptez la codul de mai sus.

Actualizat: Am postat codul meu mai jos.

0
Toate răspunsurile la întrebare 3
3

Mulțumesc băieților pentru răspunsul atât de rapid. Apreciez mult!

Iată codul pentru pagina "globală" de Tag-uri (afișează termenii din taxonomia implicită '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. ?>  

Iar următorul exemplu de cod este pentru interogarea de taxonomie personalizată (afișează termenii dintr-o taxonomie personalizată):

<?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. ?> 
4 apr. 2011 21:01:07
Comentarii

Acesta este răspunsul tău la propria întrebare, sau o parte ulterioară a întrebării tale?

MikeSchinkel MikeSchinkel
5 apr. 2011 08:27:51

Aceasta mi se pare un răspuns în contextul întrebării originale, respingând flag-ul pus pe el.

Rarst Rarst
5 apr. 2011 18:10:26

@MikeSchinkel - Acesta este răspunsul meu. Am postat întregul cod al soluției.

1 este pentru afișarea termenilor din taxonomia implicită 'post_tag', care este folosită în tipurile personalizate de postări.

2 este pentru afișarea termenilor din taxonomia personalizată.

Andrew Andrew
6 apr. 2011 14:01:37
0

Există o referință la termenul de obiect în $wp_query și o funcție scurtătură pentru a-l obține (cu condiția să folosiți WordPress 3.1 sau o versiune ulterioară): get_queried_object().

Deci, pentru a obține slug-ul, ați folosi echo get_queried_object()->slug;

Dacă nu utilizați WordPress 3.1, va trebui să apelați get_queried_object() pe global $wp_query:

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

4 apr. 2011 15:55:13
0

Iată o funcție derivată single_term_slug() extrasă din 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;
}
4 apr. 2011 16:00:42