Abrufen des Permalinks für den Produktattributbegriff in WordPress / WooCommerce

Lesezeit: 3 Minuten

Ich verwende WooCommerce mit WordPress, um einen Laden mit antiken Fotos aufzubauen.

Ich verwende die Produktattribute-Funktion von WooCommerce, um Informationen über einen Artikelfotografen zu speichern.

Siehe hier für ein Beispiel, das Fotografenattribut wird in der Box auf der linken Seite herausgezogen http://bit.ly/1Dp999O

Der Code, der das Attribut herauszieht, sieht folgendermaßen aus:

if($attribute['is_taxonomy']) {
  $values=wc_get_product_terms($product->id, $attribute['name'], array('fields' => 'names'));
  echo apply_filters('woocommerce_attribute', wpautop(wptexturize(implode(', ', $values))), $attribute, $values);
}

$values ​​sieht so aus:

Array ( [0] => Photographer 1 )

Das Problem ist, wie komme ich zum Permalink für den Fotografen, der automatisch von WordPress und WooCommerce generiert wird:
http://bit.ly/1JtwBna

Ich kann in WooCommerce keine Dokumentation dafür finden, und dies scheint eine Taxonomie innerhalb einer Taxonomie zu sein, die etwas weiter geht als Standard-WordPress, aber ich gehe davon aus, dass dies eine ziemlich standardmäßige Anforderung ist. Alle Hinweise geschätzt.

  • Ein Attribut ist keine Taxonomie innerhalb einer Taxonomie, es ist lediglich eine benutzerdefinierte Taxonomie.

    – Helgathewikinger

    9. April 2015 um 21:00 Uhr

  • Ah, also wird get_the_terms vermutlich funktionieren? Werde das mal ausprobieren und entsprechend updaten

    – Christian Maine

    9. April 2015 um 21:04 Uhr

  • Ja, die meisten begriffsbezogenen Funktionen sollten funktionieren.

    – Helgathewikinger

    9. April 2015 um 21:49 Uhr

Benutzer-Avatar
Helgathewikinger

Sobald Sie den Attributbegriff (in diesem Fall den Namen des Fotografen) haben, können Sie ihn verwenden get_term_link() um die URL zu bekommen. Weil die $product id wird nicht an die weitergegeben woocommerce_attribute Ordner konnte ich das nicht filtern, sondern stattdessen eine Überschreibung des erstellen product-attributes.php Schablone. Und änderte den relevanten Abschnitt wie folgt:

if ( $attribute['is_taxonomy'] ) {

    $terms = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'all' ) );

    $html="";
    $counter = 1;
    $total = count( $terms );

    foreach( $terms as $term ){ 

        $html .= sprintf( '<a href="https://stackoverflow.com/questions/29548487/%s" title="Permalink to %s">%s</a>', 
            esc_url( get_term_link( $term ) ), 
            esc_attr( $term->name ), 
            wptexturize( $term->name ) 
        );

        if( $counter < $total ){
            $html .= ', ';
        }
        $counter++;

    }

    echo wpautop( $html );

}

Aus irgendeinem Grund ist die URL kein hübscher Permalink. Es ist spät und ich kann nicht sagen, ob das mit meiner Konfiguration zu tun hat oder was genau, aber es ist ein Anfang.

  • Ich musste die Archive auf dem Attributbearbeitungsbildschirm aktivieren. Ich habe die Permalinks gelöscht und jetzt habe ich hübsche URLs.

    – pcarvalho

    14. November 2016 um 2:53 Uhr

  • auch ich benutzte esc_url um get_term_link, aber das ist nur meine Spitzfindigkeit :). Nochmals vielen Dank @helgatheviking für deine wertvollen Antworten!

    – pcarvalho

    14. November 2016 um 2:56 Uhr

  • Du hast recht, so sollte es sein esc_url() Anstatt von esc_attr(). Ich werde das ändern.

    – Helgathewikinger

    14. November 2016 um 3:55 Uhr

Das macht im Grunde das, was ich brauche:

$terms = get_the_terms($product->id, $attribute['name']);
foreach ($terms as $term){
    echo '<a href="'.get_term_link($term->slug, $term->taxonomy).'">'.$term->name.'</a>';
}

Könnte aber sicher ein wenig Feinschliff vertragen.

  • Ja, das ist ziemlich ähnlich zu dem, was ich mir ausgedacht habe. get_the_terms() und wc_product_terms() ziemlich ähnliche Ergebnisse liefern.

    – Helgathewikinger

    9. April 2015 um 21:48 Uhr

1142910cookie-checkAbrufen des Permalinks für den Produktattributbegriff in WordPress / WooCommerce

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

Privacy policy