Nie można ustawić prawidłowego separatora do konwersji tablicy na ciąg. ja używam

echo .implode(  ",", $terms_array ).;

Wyjście to: array1array2Array3 zamiast array1, array2, array3

W piaskownicy działa dobrze, ale kiedy umieściłem kod do WordPress, nie działa.

Co może być powodem?

function wc_show_attribute_links_prodcart() {
    
    global $post;
    $attribute_names = array( 'pa_attr1', 'pa_attr2','pa_attr3' ); 
        
    foreach ( $attribute_names as $attribute_name ) {
        $taxonomy = get_taxonomy( $attribute_name );
        
        if ( $taxonomy && ! is_wp_error( $taxonomy ) ) {
            $terms = wp_get_post_terms( $post->ID, $attribute_name );
            $terms_array = array();
        
            if ( ! empty( $terms ) ) {
                foreach ( $terms as $term ) {
                   $archive_link = get_term_link( $term->slug, $attribute_name );
                   $full_line = '<a href="' . $archive_link . '">'. $term->name . '</a>';
                   array_push( $terms_array, $full_line );
                }
                //echo .implode(  ",", $terms_array );
             echo implode( ',', $terms_array );
            }
        }
    }
}
-2
zzk 22 październik 2020, 02:18

1 odpowiedź

Najlepsza odpowiedź

ITeresting twoja trzema $attribute_names.

Jeśli $taxonomy jest prawdą, wyczyszczasz swój $terms_array za każdym razem.

Jesteś implodującym i drukowaniem na końcu każdej pętli zewnętrznej, więc nie będzie przecinka między tym, co dzwonisz array1 ... itd.

Aby lepiej wizualizować wyjście, użyj linybreak <br> na końcu echa.

Lub jeśli chcesz, aby wszystkie hiperłącza były oddzielone przecinkami, po prostu zadeklaruj tablicę główną, aby zebrać je wszystkie, a następnie implode, gdy skończysz.

function wc_show_attribute_links_prodcart() {
    global $post;
    $hyperlinks = [];

    foreach (['pa_attr1', 'pa_attr2', 'pa_attr3'] as $attribute_name) {
        $taxonomy = get_taxonomy($attribute_name);
        if ($taxonomy && !is_wp_error($taxonomy)) {
            foreach (wp_get_post_terms($post->ID, $attribute_name) as $term) {
                $archive_link = get_term_link($term->slug, $attribute_name);
                $hyperlinks[] = '<a href="' . $archive_link . '">'. $term->name . '</a>';
            }
        }
    }
    echo implode(',', $hyperlinks);
}

Lub ze wszystkimi hiperłącze oddzielonymi na grupę i grupy wyraźnie oddzielone:

function wc_show_attribute_links_prodcart() {
    global $post;
    $all_term_links = [];

    foreach (['pa_attr1', 'pa_attr2', 'pa_attr3'] as $attribute_name) {
        $taxonomy = get_taxonomy($attribute_name);
        if ($taxonomy && !is_wp_error($taxonomy)) {
            $term_links = [];
            foreach (wp_get_post_terms($post->ID, $attribute_name) as $term) {
                $archive_link = get_term_link($term->slug, $attribute_name);
                $term_links[] = '<a href="' . $archive_link . '">'. $term->name . '</a>';
            }
            $all_term_links[] = implode(' & ', $term_links);
        }
    }
    echo implode(',', $all_term_links);
}

https://developer.Wordpress.org/reference/functions/wp_get_post_terms/ WP_GET_POST_TERMS () Zwraca tablicę, aby można go było podawać bezpośrednio do foreach().

0
mickmackusa 22 październik 2020, 09:33