2015-11-21 2 views
1

Я пытаюсь выполнить функцию только в том случае, если ее вызвал из определенного родителя (или функция бабушки или дедушки, или прадедушка и т. Д.). Я могу добиться того, что хочу сделать, используя debug_backtrace, но я чувствую, что это не правильный способ сделать это. Возьмите это, например:Можно ли debug_backtrace как часть функции не отладки?

function savethepost($post_id) { 
$parent = debug_backtrace(); 
if ($parent[5]['function'] == 'bulk_edit_posts') { 
    if (isset($_REQUEST['post_format']) && $_REQUEST['post_format'] != -1) { 
     set_post_format($post_id, $_REQUEST['post_format']); 
    } 
} 
} 

Это использует трассировку в функции Wordpress, чтобы выполнить функцию set_post_format только если savethepost функция вызывается из функции bulk_edit_posts, которая является то, что я пытаюсь достичь. Но поскольку этот метод предназначен для отладки, можно ли использовать его таким образом? Если нет, то как еще я мог бы вызвать вызов функции, если она исходит только из определенной родительской функции?

+0

_ "выполнить функцию только в том случае, если она вызвана из определенного родителя" _ это кажется очень странным способом для разработки функции. Вы это сделаете, но это не соответствует принципу наименьшего удивления. Можете ли вы объяснить, что вы пытаетесь сделать? – Halcyon

+0

Конечно, в WP плагине, который я пишу, savethepost - это обратный вызов save_post. В соответствии с WP codex save_post всегда вызывается после обновления почты, но по какой-то неизвестной причине при использовании функции «Массовое редактирование» save_post вызывается до того, как будет обновлен Post Format (но не в случае редактирования отдельных сообщений). Рабочий код выше вручную обновляет формат сообщения, прежде чем я сделаю другой материал (не показан), для которого требуется новый формат сообщения. В принципе, я просто пытаюсь создать один обратный вызов save_post или, скорее, только выполнить set_post_format при использовании Bulk Edit –

+0

Я не знаю достаточно о wp, чтобы прокомментировать это. Вероятно, есть правильный способ сделать это. Может быть, есть ошибка в функции «Массовое редактирование»? – Halcyon

ответ

-1

Debug_backtrace убивает производительность, поскольку он должен подготовить трассировку вызова. Так что это не очень хорошая идея. Если вам все еще нужна такая логика, попробуйте архивировать ее с аргументом функции

1

Пошел через этот old question, которого я раньше не видел. Принятый ответ также применяется и в этом случае.

Смежные вопросы