hakre
  • 0
Гуру

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

  • 0

У нас есть теги шаблонов и некоторые функции, которые начинаются с 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');

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

Share
  1. Возможно, это функция, которую можно добавить в сам PHP.

    • 0
    • Есть несколько функций, которые уже имеют такое поведение. bloginfo() сочетается с get_bloginfo() для генерации возврата, а не эха. Есть несколько других функций, которые служат той же цели. Мой встречный вопрос: что вы пытаетесь сделать там, где вам нужна такая глобальная функция?

      • 0
    • @hakre — Хотя я согласен с потенциальной необходимостью такой функции, WordPress Answers не является подходящим местом для обсуждения — вам следует обсудить wp-hackers и/или добавить билет в trac. Этот вопрос по своей природе, вероятно, не является окончательным, и если бы вам сказали, почему его нет, какое значение это имело бы? Вопрос на самом деле больше состоит в запросе функций и завуалированных разглагольствованиях. Я голосую за закрытие.

      • 0
    • @MikeSchinkel: Совершенно верно, просто хотел проверить место проведения и проверить границы. Я вижу из комментариев ответы, что это в неправильном направлении. Ценность знания того, почему этого нет, может помочь лучше понять и найти способ ввести его.

      • 0
    • Чтобы перейти к обсуждению этого аспекта, я просто подумал, зачем изобретать велосипед. Например, если он будет поставляться с WP, не каждому автору плагина это будет нужно. Я не знал, что есть руководство по возврату собственных функций, а не эху.

      • 0
    • нет, я не это специально спрашивал. Представьте, что плагин предлагает новый тег шаблона, но он предназначен для работы только в цикле. Но вам нужно извлечь данные из цикла, сохранить их в переменной и использовать позже вне цикла. Что-то вроде этого сценария.

      • 0
    • Понимаю. Может быть, уточните, что вы, мужчины, говорите «позже» в своем вопросе. Будет ли он храниться в массиве? Или имя переменной должно быть динамическим, чтобы избежать перезаписи в цикле?

      • 0
    • Я считаю, что вопрос был направлен на функции, которые не имеют get_ эквивалента, поэтому вам придется использовать буферизацию вывода.

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

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

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

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

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

    Написание get_the_title() также короче, чем написание get_output(‘the_title’) 🙂

    • 0

Оставить ответ

You must login to add an answer.