Anzeigen von Tags auf der Taxonomieseite

Lesezeit: 8 Minuten

Ich habe derzeit die Option in meinem CMS, Tags zu meiner benutzerdefinierten Beitragstyp-Einzelseite hinzuzufügen.

Jetzt möchte ich dieses Tag als “empfohlenes” Element anzeigen. In meinem Taxonomie-‘Dateinamen’ verwende ich also den folgenden Code, der die Tags sammelt und sie auf der Taxonomie-Seite anzeigt:

            <?php 
        $args = array(
          'tag_slug__and' => array('sector1'),
          'post_type' => array( 'sectors' )
          );
        $loop = new WP_Query( $args );
        while ($loop->have_posts() ) : $loop->the_post();
        ?>
        <a href="https://stackoverflow.com/questions/30256167/<?php echo get_permalink(); ?>">
         <?php echo "<div class="col-md-6" style="margin-bottom:20px;">"; ?>
         <div class="row mobilemargin">
          <div class="categorytiletextsector1">
            <div class="col-md-6 col-sm-6 col-xs-12 nopr"><?php echo get_the_post_thumbnail( $page->ID, 'categoryimage', array('class' => 'sector1img hovereffect')); ?> </div>
            <div class="col-md-6 col-sm-6 col-xs-12">
              <div class="testdiv">
               <h5><?php the_title(); ?></h5>
               <p><?php the_excerpt(); ?></p>
             </div>
           </div>
         </div>
       </div>
       <?php echo "</div>"; ?>

     </a>
   <?php endwhile; ?>
   <?php wp_reset_query(); ?>

Mein Problem ist nun, dass das ausgewählte Tag jetzt auf jeder Kategorieseite angezeigt wird, wie es auf der Taxonomieseite festgelegt ist.

Wie kann ich das nur auf die aktuelle Kategorie einstellen.

Wenn also mein Artikel in der „Kategorie A“ ist, würde dies nur auf der Kategorieseite von „A“ angezeigt, wenn die Artikelkategorie verwendet wird?

Jede Hilfe wäre großartig

Bearbeiten. Habe diesen Code verwendet, in der Hoffnung, dass dies funktionieren sollte, aber kein Glück

$args = array(
    'tag_slug__and' => array( 'sector1' ),
    'post_type'     => array( 'sectors' ),
    'tax_query'     => array(
        array(
            'taxonomy' => 'sectors',
            'terms'    => get_queried_object_id(),
        ),
    ),
);

  • Hat irgendjemand ne Idee????

    Benutzer2209033

    17. Mai 2015 um 14:21 Uhr

Benutzer-Avatar
Pieter Goosen

Ihr Problem ist Ihre benutzerdefinierte Abfrage. Ein sehr wichtiger Hinweis hier ist, niemals die Hauptabfrage durch eine benutzerdefinierte Abfrage auf irgendeiner Art von Archivseite oder der Homepage zu ersetzen. Ich habe alles ausführlich in diesem Beitrag kürzlich erklärt. Stellen Sie sicher, dass Sie es und alle verlinkten Beiträge lesen, da Sie davon sehr profitieren werden

Ihre Lösung wäre, Ihre benutzerdefinierte Abfrage zu entfernen und diese durch die uns allen bekannte Standardschleife zu ersetzen

if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();

        // Your template tags and html mark up

    }
}

Wenn Sie etwas in der Hauptabfrage ändern müssen, verwenden Sie pre_get_posts dazu

BEARBEITEN

Ihre beste Idee wäre hier, eine volle zu verwenden tax_query um Beiträge anzuzeigen, die sich im ausgewählten Taxonomie-Begriff und -Tag befinden

Sie können so etwas versuchen: (Benötigt mindestens PHP 5.4+. Auch dies ungetestet)

$q = get_queried_object();
$args = [
    'post_type' => 'sectors',
    'tax_query' => [
        [
            'taxonomy' => $q->taxonomy,
            'terms' => $q->term_id,
            'include_children' => false // Exclude child terms
        ],
        [
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => 'sector1', //I believe this is the slug
        ],
    ],
];

Verwenden Sie für ältere PHP-Versionen Folgendes

$q = get_queried_object();
$args = array(
    'post_type' => 'sectors',
    'tax_query' => array(
        array(
            'taxonomy' => $q->taxonomy,
            'terms' => $q->term_id,
            'include_children' => false // Exclude child terms
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => 'sector1', //I believe this is the slug
        ),
    ),
);

BEARBEITEN 2

Um Beiträge auszuschließen, die sich in der sector1 Tag und alle anderen sectorX -Tag können Sie Folgendes tun

Sie können so etwas versuchen: (Benötigt mindestens PHP 5.4+. Auch dies ungetestet)

$q = get_queried_object();
$args = [
    'post_type' => 'sectors',
    'tax_query' => [
        [
            'taxonomy' => $q->taxonomy,
            'terms' => $q->term_id,
            'include_children' => false // Exclude child terms
        ],
        [
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => 'sector1', //I believe this is the slug
            'operator' => 'NOT_IN'
        ],
    ],
];

Verwenden Sie für ältere PHP-Versionen Folgendes

$q = get_queried_object();
$args = array(
    'post_type' => 'sectors',
    'tax_query' => array(
        array(
            'taxonomy' => $q->taxonomy,
            'terms' => $q->term_id,
            'include_children' => false // Exclude child terms
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => 'sector1', //I believe this is the slug
            'operator' => 'NOT_IN'
        ),
    ),
);

Beachten Sie nur, dass Sie ein Array von Tags an die übergeben können terms Parameter wie dieser

'terms' => array( 'sector1', 'sector2', 'etc' ),

oder kurze Array-Syntax

'terms' => ['sector1', 'sector2', 'etc'],

BEARBEITEN 3

Da dies Ihre Hauptabfrage ist, müssen Sie einige Änderungen vornehmen. Wie gesagt, entfernen Sie die benutzerdefinierte Abfrage. Ihre Hauptschleife sollte in etwa so aussehen

<?php if (have_posts()) : ?> 
    <?php while (have_posts()) : the_post(); ?> 
        <a href="https://stackoverflow.com/questions/30256167/<?php echo get_permalink(); ?>"> 
        <?php echo "<div class="col-md-6 col-sm-6 col-xs-12" style="margin-bottom:30px;">"; ?> 
        <div class="row mobilemargin"> 
            <div class="categorytiletext2"> 
                <div class="col-md-6 col-sm-12 col-xs-12 nopr"><?php echo get_the_post_thumbnail( $page->ID, 'categoryimage', array('class' => 'hovereffect newimgheight')); ?> </div> 
                <div class="col-md-6 col-sm-12 col-xs-12 mobilewhite"> 
                    <div class="testdiv"> 
                        <h5 class="captext"><?php the_title(); ?></h5> 
                        <?php $trimexcerpt = get_the_excerpt(); 

                        $shortexcerpt = wp_trim_words( $trimexcerpt, $num_words = 10, $more="… " ); 

                        echo '<a href="' . get_permalink() . '"><p>' . $shortexcerpt . '</p></a>'; 

                        ?> 
                    </div> 
                </div> 
            </div> 
        </div> 
        <?php echo "</div>"; ?> 

        </a> 
        <!-- If there is no posts, display an error message --> 
    <?php endwhile; 
else: ?> 
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p> 
<?php endif; ?> 
<!-- If there is no posts, display an error message -->

Sie können jetzt verwenden pre_get_posts um das gewünschte Tag von Ihren Taxonomieseiten zu entfernen. Gehen Sie in Ihrer functions.php wie folgt vor: (Benötigt PHP 5.3+ und ist ebenfalls ungetestet)

add_action( 'pre_get_posts', function ( $q )
{
    if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
       $q->set( 'tag__not_in', array( 145 ) );
    }
});

Für ältere Versionen verwenden

add_action( 'pre_get_posts', 'so30256167_remove_tags' );
function so30256167_remove_tags( $q )
{
    if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
       $q->set( 'tag__not_in', array( 145 ) );
    }
}

Denken Sie nur daran, sich zu ändern 145 zu Ihrem genauen Tag Ich würde oder ein Array von Tagsids

BEARBEITEN 4

Wenn Sie die Tag-IDs nicht haben, können Sie verwenden get_term_by() um die Tag-ID aus dem Tag-Slug zu erhalten. So etwas wird tun: (Benötigt PHP 5.3+ und ist ebenfalls ungetestet)

add_action( 'pre_get_posts', function ( $q )
{
    if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
        $tag_object = get_term_by( 'slug', 'sector1', 'post_tag' ); 
        $tagID = $tag_object->term_id; 

       $q->set( 'tag__not_in', array( $tagID ) );
    }
});

Für ältere Versionen verwenden

add_action( 'pre_get_posts', 'so30256167_remove_tags' );
function so30256167_remove_tags( $q )
{
    if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
        $tag_object = get_term_by( 'slug', 'sector1', 'post_tag' ); 
        $tagID = $tag_object->term_id; 

       $q->set( 'tag__not_in', array( $tagID ) );
    }
}

Wenn Sie über ein Array von Tag-Slugs verfügen, können Sie Folgendes ersetzen

$tag_object = get_term_by( 'slug', 'sector1', 'post_tag' ); 
$tagID = $tag_object->term_id; 

$q->set( 'tag__not_in', array( $tagID ) );/*

mit

$tag_array = array( 'slug1', 'slug2', 'slug3' );
foreach ( $tag_array as $tag ) {
    $tag_object = get_term_by( 'slug', $tag, 'post_tag' ); 
    $tagids[] = $tag_object->term_id;
} 
$q->set( 'tag__not_in', $tagids );

Denken Sie nur daran, die Schnecken entsprechend zu ändern

BEARBEITEN 5

Ihren endgültigen Code in der functions.php mit pre_get_posts sollte sein

add_action( 'pre_get_posts', 'so30256167_remove_tags' );
function so30256167_remove_tags( $q )
{
    if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
        $tag_array = array( 'sector1', 'sector2', 'sector3', 'sector4' );
        foreach ( $tag_array as $tag ) {
            $tag_object = get_term_by( 'slug', $tag, 'post_tag' ); 
            $tagids[] = $tag_object->term_id;
        } 
        $q->set( 'tag__not_in', $tagids );    
    }
}

  • Ich glaube ich habe deine Frage falsch verstanden

    – Pieter Goosen

    17. Mai 2015 um 14:50 Uhr

  • The Loop funktioniert, es werden die markierten Beiträge abgerufen, aber es wird in JEDER Kategorie angezeigt. Ich brauche nur einen Weg, damit es nur in der Kategorie angezeigt wird, auf die es sich bezieht, was ich dachte, ich hätte es mit den ‘Begriffen’ gemacht => get_queried_object_id(),

    Benutzer2209033

    17. Mai 2015 um 14:53 Uhr

  • Ok, ich verstehe deine Frage nicht, ist das deine Hauptschleife?

    – Pieter Goosen

    17. Mai 2015 um 14:56 Uhr

  • Dies ist nur eine Schleife, die jeden getaggten Beitrag mit dem Namen „Sektor1“ erhält. Diese Schleife funktioniert gut, sie erhält den markierten Beitrag und zeigt ihn an. Aber es zeigt es in jeder Kategorie an, ich brauche es, um es nur in der Kategorie anzuzeigen, zu der es gehört

    Benutzer2209033

    17. Mai 2015 um 14:58 Uhr

  • Ihre Terminologie verwirrt mich, was genau ist sector1. Wie hast du das erstellt. Kennen Sie den Unterschied zwischen Kategorien, Taxonomien und Begriffen? Was ist es, was Sie versuchen zu tun. Was passiert, wenn Sie Ihren gesamten Code (benutzerdefinierte Schleife) durch die Schleife in meiner Antwort ersetzen

    – Pieter Goosen

    17. Mai 2015 um 15:05 Uhr

1385530cookie-checkAnzeigen von Tags auf der Taxonomieseite

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy