Mueva el código del término a algún lugar encima del código “variante”. Inserte lo siguiente donde quiera que aparezca el nombre del término en la lista de variantes (en algún lugar encima de la línea implode()):$output_distanze[] = $term_name17_str;
Estoy haciendo algo mal porque obtengo como resultado solo el último término ($term_name18_str) y ambos con una coma y un punto: https://pastebin.com/G5hkNYfF
Estoy intentando concatenar 2 términos: $term_name17_str y $term_name18_str, después del primero, una coma, después del segundo y último, un punto.
Probablemente solo necesito $term_name17
y no $term_name17_str
porque la coma está escrita por “implosionar”, pero aún necesito corregir algo
Si, usa $term_name17
. Con implode(), cada elemento de la matriz pasada está separado por el primer argumento, ', '
en este caso. Luego, el punto terminal se concatena con la cuerda implosionada.
Si solo obtiene un valor como resultado pero con una coma adicional, el otro valor estará en blanco o será una cadena vacía. En el caso de valores faltantes o vacíos, no debe agregarlos a la matriz en absoluto. Quizás haga algo similar a lo siguiente para cada elemento de la matriz:if ( ! empty( $term_name17 )) $output_piano_sup[] = $term_name17;
Tengo 2 problemas: el primero es pequeño, tengo un espacio en blanco antes del punto final en la salida del array: https://test.sacconicase.com/forte-dei-marmi-villa-con-giardino-disposta-su -2-piani-por-5-personas/
Si ves “Al 1° piano” (en el primer piso), en italiano hay 3 elementos del conjunto. El segundo problema es que en los otros idiomas solo tengo 2 elementos en la matriz, incluso si he creado correctamente los metacampos específicos para inglés y alemán, ¿tal vez puedas inspeccionar el código del campo en inglés? https://pastebin.com/dc14gNzE
está conectado con esto
//bagno sup$lang = substr( get_locale(), 0, 2 );
$terms = get_the_terms( get_the_ID(), 'bagno_sup');
if ( is_array( $terms )) {
$term = $terms[0]; // get the zeroth element in array, a WP_Term object
if ( $lang == 'it' ){$term_name19 = $term->name . ' ' ;
} else {$term_name = get_term_meta( $term->term_id , 'bagno_sup_'.$lang, true ). ' ' ;
}
} else {
$term_name19 = '';
}
//fine bagno sup
Otra cosa sobre la implosión: cuando no hay ningún término debería tener un punto como salida
La razón por la que los términos meta en alemán e inglés no aparecen es porque tiene nombres de variables inconsistentes en su código. tu usas $term_name19
en varios lugares pero $term_name
para el término no italiano meta. también debería serlo $term_name19
.
La razón por la que aparece un espacio después de las frases es porque estás concatenando el espacio en tu código. Por ejemplo: $term_name19 = $term->name . ' ' ;
No necesitas el . ' '
parte.
Deje que implode() maneje lo que ocurre entre frases. Deje que lo que suceda al final se maneje después de la llamada implode(). Por ejemplo:echo implode(', ', $output_distanze ).'. ';
No tengo claro cuándo quieres que aparezca solo un punto. ¿Cuando falta algún término o cuando no hay términos en toda la matriz para implosionar? Para cualquier término que falte, podrías hacer algo como:$output_piano_sup[] = empty( $term_name17 ) ? '.': $term_name17;
Esto podría dar como resultado un resultado similar a:
Al 1° piano: ., ., 1 bagno con vasca.
Me parece raro. Si esta no es su intención, ¿qué tipo de resultado pretende?
Esta respuesta fue modificada hace 3 días y 6 horas por bcworkz. Razón: formato del código
Los primeros 2 problemas han sido resueltos.
Acerca de la llamada implode(): Si hay al menos un término, mi código funciona correctamente, el problema surge cuando no se utiliza ninguno de los términos. Porque siempre aparece el punto al final.
¡Ah, ya veo lo que quieres decir! Haz algo como esto:if ( ! empty( $output_distanze )) echo implode(', ', $output_distanze ).'. ';
Esta respuesta fue modificada hace 2 días y 7 horas por bcworkz. Razón: formato de código arreglado
Por el momento no funciona, he probado muchas posiciones pero quizás el código no esté en la buena: https://pastebin.com/g4NYgzqP
Mi sugerencia anterior era genérica y no reflejaba su contexto específico. Específicamente lo que sugiero es que elimines esta parte del return
declaración: implode(', ', $output_piano_sup ).'.' . ' '
y muévalo por encima del return
declaración. Reemplace donde estaba con una variable única que no se use en ningún otro lugar, tal vez $piano_sup
¿tal vez?
Luego con el código implode() que ahora está encima del return
declaración, modifíquela para que quede así:$piano_sup = empty( $output_distanze )) ? '' : implode(', ', $output_distanze ).'. ';