无法在 WordPress 的数组上使用 implode() 设置逗号分隔符

Can't set a coma separator using implode() on an array in WordPress

无法为数组转换为字符串设置正确的分隔符。我正在使用

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

输出是:array1array2array3 而不是 array1,array2,array3

在沙盒中它工作正常,但是当我将代码放入 WordPress 时,它不工作。

可能是什么原因?

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 );
            }
        }
    }
}

您正在迭代您的三个 $attribute_names

如果 $taxonomy 为真,则您每次都在清除 $terms_array

您在每个外循环的末尾进行内爆和打印,因此您调用的内容之间不会有逗号 array1 ...等等

为了更好地可视化输出,请在 echo 末尾使用换行符 <br>

或者,如果您希望所有超链接都是 comma-separated,只需声明一个主数组来收集它们,然后在完成后内爆。

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);
}

或者所有超链接按组分开并且组明显分开:

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() returns 一个数组,因此它可以直接馈送到 foreach().