无法在 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()
.
无法为数组转换为字符串设置正确的分隔符。我正在使用
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()
.