web-dev-qa-db-fra.com

Pourquoi n'y a-t-il pas une fonction globale dans wordpress pour renvoyer la sortie d'un appel de fonction?

Nous avons des balises de modèles et certaines fonctions qui commencent par get. Parfois, il serait juste Nice dans les thèmes à faire comme:

$title = the_title();

utiliser le html plus tard. Ceci est juste un exemple simplifié, il y a naturellement une fonction comme get_the_title (); Mais cela ne fonctionne que pour cette fonction.

Je me demande pourquoi il n'y a pas une telle fonction comme celle-ci:

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

Cela pourrait convertir n'importe quelle fonction ayant une sortie en une fonction de retour:

$title = get_output('the_title');

Aucune idée pourquoi à propos de cela n'a jamais été pensé? Chaque auteur de thème ou pirate informatique peut en faire usage, non?

3
hakre

En réponse directe à la question, WordPress n'inclut pas de fonction pour cela en partie car elle ne s'applique pas spécifiquement à la fonctionnalité WordPress. C'est à dire. c'est un problème PHP (potentiel), pas WordPress.

De plus, je ne dirais pas qu'il est de la responsabilité de WordPress de fournir des solutions de contournement pour les plugins, etc. qui ne fournissent pas une fonction permettant de renvoyer des données (ce qui est contraire au style WordPress général).

2
Joe Hoyle

Je dirais que get_posts est la WP réponse à votre demande. Des balises de modèles ont été créées pour être utilisées dans The Loop, mais il est assez facile pour tout WP 'hacker' d'utiliser get_posts () à la place et d'assigner, par exemple: $ post-> post_title à une variable. Au début, il est frustrant de cesser de compter sur The Loop, mais assez facile pour aller au-delà.

2
kevtrout

Comme cela pourrait être plus facile pour certains développeurs de thèmes, vous devez le prendre comme cela. Mais vous pouvez écrire la fonction vous-même:

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

L'écriture de get_the_title () est également plus courte que l'écriture de get_output ('the_title') :)

1
2ndkauboy