it-swarm-es.com

¿Por qué no hay una función global en wordpress para devolver la salida de cualquier llamada de función?

Tenemos etiquetas de plantilla y algunas funciones que comienzan con get. A veces sería simplemente agradable en temas como:

$title = the_title();

para utilizar el html más adelante. Este es solo un ejemplo simplificado, naturalmente hay alguna función como get_the_title (); Pero eso funciona solo para esa función.

Me pregunto por qué no hay tal función como esta:

function get_output() {
    $args     = func_get_args();
    $callback = array_shift($args);
    ob_start();
    call_user_func_array($callback, $args);
    return ob_get_clean();
}

Eso podría convertir cualquier función que tenga salida en una función de retorno:

$title = get_output('the_title');

¿Alguna idea de por qué nunca se ha pensado en eso? Todo tema autor o hacker puede hacer uso de eso, ¿verdad?

3
hakre

En respuesta directa a la pregunta, WordPress no incluye una función para esto en parte porque no se aplica específicamente a la funcionalidad de WordPress. Es decir. es un problema PHP (potencial), no WordPress.

Además, no diría que es responsabilidad de WordPress proporcionar soluciones para los complementos, etc. que no proporcionan una función para devolver datos (lo que va en contra del estilo general de WordPress).

2
Joe Hoyle

Yo diría que get_posts es la WP respuesta para su solicitud. Las etiquetas de plantilla se han creado para su uso en The Loop, pero es bastante fácil para cualquier WP 'pirata informático' usar get_posts () en su lugar, y asignar, por ejemplo: $ post-> post_title a una variable. Es frustrante al principio, dejar de confiar en The Loop, pero lo suficientemente fácil como para pasar de largo.

2
kevtrout

Como puede ser más fácil para algunos desarrolladores de temas, debes tomarlo como se hace. Pero puedes escribir la función tú mismo:

function get_output($function){
    return call_user_func('get_'.$function);
}

Escribir get_the_title () también es más corto que escribir get_output ('the_title') :)

1
2ndkauboy