Mientras aprendía sobre la carga diferida de metadatos, conocí estas líneas de código :
// Don't use `wp_list_pluck()` to avoid by-reference manipulation.
$comment_ids = array();
if ( is_array( $comments ) ) {
foreach ( $comments as $comment ) {
if ( $comment instanceof WP_Comment ) {
$comment_ids[] = $comment->comment_ID;
}
}
}
Pensé que se relaciona con este tema, pero no hay referencias aquí y el único foreachbucle está envuelto dentro de una función, ¿cómo puede ocurrir la manipulación por referencia en este caso?
Y, para la mejor práctica, ¿cuándo debemos usar la wp_list_pluck()función?
functions
customization
SarahCoding
fuente
fuente

Respuestas:
En cualquier
foreachbucle, el último valor de la matriz que se repite permanece después del final delforeachbucle. Es por eso que uno siempre debe desarmar ese valor una vez que se completa elforeachciclo.wp_list_pluck()también es solo unforeachciclo básico si$index_keyno se pasa. Además, como con cualquierforeachbucle, el último valor de la matriz permanece después del final delforeachbucle, y creo que a esto se refiere esa línea en el códice.Sin embargo, esa suposición es incorrecta. Las funciones son piezas de código independientes y, a excepción de los globales, estas piezas de código dentro de una función solo están disponibles para la función misma.
wp_list_pluck()no globaliza ninguno de sus valores internos ( variables ), por lo que incluso si el último valor de la matriz aún está disponible después delforeachciclo dentro de la función, y no se desarma, no está disponible para ningún fragmento de código fuera de la función, por lo que no puede tener el problema de pasar por referencia como se describe en esa línea en el códice.wp_list_pluck()es tan válido para usar como cualquierforeachbucle simple . La elección depende de ti. Personalmente prefiero,wp_list_pluck()ya que ahorra en código, y no es necesario que recuerde desarmar las variables que luego pueden conducir a la depuración de la pesadilla.Solo una nota final,
wp_list_pluck()también puede reemplazararray_columnya que funciona igual si$index_keyse pasa a la funciónfuente
unset( $value )después de unforeachciclo,wp_reset_postdata()si lo usósetup_postdata( $post )en unforeachciclo, yreset()establece el puntero interno de nuevo al primer elemento de una matriz. Si me equivoco, o si tiene algo más o diferente que agregar, debe hacerlo en una respuesta para que todos nos beneficiemos de eso. En mi humilde opinión, esta es una pregunta de la que la mayoría de la comunidad puede beneficiarse, y si me equivoco, corríjame y publique una respuesta adecuada