Почему в wordpress нет глобальной функции для возврата вывода любого вызова функции?


У нас есть теги шаблонов и некоторые функции, которые начинаются с get. Иногда было бы просто неплохо в темах сделать что-то вроде:

$title = the_title();

Чтобы использовать html позже. Это всего лишь упрощенный пример, естественно, есть такая функция, как get_the_title(); Но это работает только для этой функции.

Мне интересно, почему нет такой функции, как эта:

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

, который может преобразовать любую функцию, имеющую выходные данные, в возвращаемую функция:

$title = get_output('the_title');

Есть идеи, почему об этом никогда не задумывались? Каждый автор темы или хакер может использовать это, не так ли?

Author: hakre, 2010-08-30

3 answers

В прямом ответе на вопрос WordPress не включает функцию для этого отчасти потому, что она специально не применяется к функциям WordPress. Т.е. это проблема PHP (потенциальная), а не WordPress.

Кроме того, я бы не сказал, что WordPress несет ответственность за обеспечение обходных путей для плагинов и т. Д., Которые не предоставляют функцию для возврата данных (что противоречит общему стилю WordPress).

 2
Author: Joe Hoyle, 2010-08-31 16:17:11

Я бы сказал, что get_posts является ответом WP на ваш запрос. Теги шаблонов были созданы для использования в цикле, но любому "хакеру" WP достаточно легко использовать вместо этого get_posts() и назначить, например: $post->post_title переменной. Поначалу неприятно перестать полагаться на Цикл, но достаточно легко пройти мимо.

 2
Author: kevtrout, 2010-08-30 20:06:48

Поскольку некоторым разработчикам тем может быть проще, вы должны воспринимать это так, как это делается. Но вы можете написать функцию самостоятельно:

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

Запись get_the_title() также короче, чем запись get_output('the_title'):)

 1
Author: 2ndkauboy, 2010-08-31 15:06:06