it-swarm.com.de

Wie werden benutzerdefinierte WordPress-Tags ausgegeben, die durch Kommas getrennt sind?

Basierend auf einigen Referenzen habe ich eine Funktion erstellt, um eine Liste benutzerdefinierter Taxonomiebegriffe auszugeben, die durch Kommas getrennt sind. Der Code funktioniert wie vorgesehen, wobei food_tag die benutzerdefinierte Taxonomie ist, die ich für einen benutzerdefinierten post_type registriert habe.

Hier ist die Funktion:

function get_taxonomy_food_tags(){
 $terms = get_terms('food_tag');
 foreach($terms as $term){

 // The $term is an object, so we don't need to specify the $taxonomy.

 $term_link = get_term_link($term);

 $numItems = count($terms);
 $i        = 0;

 // If there was an error, continue to the next term.

 if (is_wp_error($term_link)){
      continue;
 }

 // We successfully got a link. Print it out.

 echo '<a href="' . esc_url($term_link) . '">' . $term->name . '</a>';

 if (++$i != $numItems) {
            echo ', ';
 }

 }
}

Anschließend platziere ich den Code <?php get_taxonony_food_tags(); ?> an einer beliebigen Stelle in den .php-Vorlagen meines Themas und erhalte eine Liste meiner benutzerdefinierten Tags mit einem Link. sowie:

Zutaten: Speck, Tomatenscheiben, Tomatensauce, Salat, Rindfleisch,

Es stellt sich heraus, dass das letzte Tag im Array auch mit einem Komma gedruckt wird

Wie richte ich die Funktion zum Ausschließen des letzten Kommas richtig ein?

Danke im Voraus.

1

Sie haben hier ein paar Mängel:

  • IMMER Code in einer Weise mit einer Denkweise, die Ihr Code wird Scheitern. Dies ist sehr wichtig. Die meisten Menschen codieren mit einer perfekten Weltmentalität. Eine perfekte Welt wird niemals passieren. Denken Sie immer daran, was passiert, wenn Ihr Code ausfällt.

    Beispiel: In Ihrem Code gibt $terms ein Objekt aus Termobjekten zurück, wenn alles übersteht. $terms gibt auch ein leeres Array zurück, wenn die Taxonomie keine Begriffe oder Begriffe ohne Einträge enthält. Es wird auch ein WP_Error-Objekt zurückgegeben, wenn die Taxonomie nicht vorhanden ist. Das sind alles Fehler. Ungültige Taxonomie, die Sie möglicherweise fragen. Wenn Sie Ihre Taxonomie korrekt in einem Plugin registriert haben und dieses Plugin deaktivieren, ist Ihre Taxonomie nicht mehr vorhanden, was den ungültigen Taxonomiefehler auslöst.

  • Sie sollten Ihren Zähler außerhalb der foreach-Schleife starten. Nicht im Inneren

  • Das Präfix get_ wird für Funktionen verwendet, die ihre Ausgabe zurückgeben, nicht sie wiedergeben.

  • Immer desinfizieren und validieren

Ich werde Ihren Code so umschreiben, dass er ungefähr so ​​aussieht: ( HINWEIS: Benötigt PHP5.4 + )

function get_taxonomy_food_tags( $taxonomy = '', $args = [] )
{
    // Check if we have a taxonomy and that it is valid. If not, return false
    if ( !$taxonomy )
        return false;

    // Sanitize the taxonomy input
    $taxonomy = filter_var( $taxonomy, FILTER_SANITIZE_STRING );

    if ( !taxonomy_exists( $taxonomy ) )
        return false;

    // If we reached this point, our taxonomy is valid. So lets continue. Get our terms
    $terms = get_terms( $taxonomy, $args );

    // We will only check if we have terms, we know our taxonomy is valid because we have reached this point
    if ( empty( $terms ) )
        return false;

    // Great, if we got to this point, we have terms, lets continue
    // Define our variable to hold our term links
    $term_links_array = [];
    foreach ( $terms as $term ) {
        $term_link = get_term_link( $term );

        // Make sure we do not have a WP_Error object, not really necessary, but better be safe
        if ( is_wp_error( $term ) )
            continue;

        // Build an array of term links. Let php do the hard work and calculations
        $term_links_array[] = '<a href="' . esc_url($term_link) . '">' . $term->name . '</a>';
    } // endforeach

    // Make sure that we have an array of term links, if not, return false
    if ( !$term_links_array )
        return false;

    // We have reached this point, lets output our term links
    return implode( ', ', $term_links_array );
}

Sie können es jetzt wie folgt verwenden

echo get_taxonomy_food_tags( 'food_tag' );

Ich habe auch einen zweiten Parameter eingeführt, mit dem Sie ein Array von Argumenten an die interne Funktion get_terms() übergeben können, damit Sie die neue Funktion genauso verwenden können wie die Standardfunktion get_terms()

2
Pieter Goosen

Das Problem ist, dass Sie $ i jedes Mal, wenn die foreach-Schleife ausgeführt wird, 0 als Wert zuweisen. Wenn also die letzte if-Anweisung ausgeführt wird, ist der Vergleich jedes Mal 1! = 3 und das Komma wird immer gedruckt. Versuchen Sie, $ i = 0 zu deklarieren; außerhalb der foreach-Schleife. So was:

$terms = get_terms('food_tag');
$i = 0;
foreach($terms as $term){ 

//the code here

}

Außerdem fehlt am Ende eine geschweifte Klammer, möglicherweise handelt es sich nur um einen Kopier-/Einfügefehler, aber für diejenigen, die versuchen, diese zu kopieren, fügen Sie sie ein und lassen Sie sie ausführen.