Intereting Posts
Резервное копирование WordPress (на другом сервере), ведущее к старым серверам addy и WP Показать сообщение из пользовательского типа сообщения Strip $ before & $ после строк из заголовка страницы Как удалить фиды из WordPress? Загрузите файл, не привязывая его к POST Показать дату публикации как 26.04.2012 Опознать поля Условное входное маскирование Стиль встречного контура Получать сообщения об ошибках, когда $ wpdb-insert () возвращает false? Редактирование пользовательских таблиц базы данных в WordPress Список таксономий: не перечислять таксономии, если у нее нет должности – в зависимости от пользовательской пост-мета? Есть ли способ указать порядок меток по полю post_meta CodeColorer: разрешить некоторые символы на языке Java Ошибка подачи: фид не найден на youtube.com/… (1 сообщение) Используйте действие формы «get» на странице администрирования плагина WordPress.

Свойство класса, похоже, теряет объем, прикрепленный к действию save_post?

Это может быть больше подходит для StackExchange, поэтому, если вы считаете, что это будет подходящее место, чтобы направить мой вопрос – пожалуйста, дайте мне знать :).

Итак, у меня есть класс со свойством save_list . Это 2D-массив с его значениями, находящимися в array('meta_key' => $meta_key) format array('meta_key' => $meta_key) . Этот класс $metabox один раз как $metabox внутри моего файла functions.php , и после этого переменная $metabox используется для поддержания ссылки на объект.

Моя проблема заключается в том, что когда дело доходит до действия save_post , объект, похоже, потеряет свойство save_list , поскольку попытка сбросить его показывает массив без значений.

 class Metabox { public function __construct() { $this->save_list = array(); add_action('save_post', array($this, 'save_postmeta')); } public function text($meta_key, $atts) { global $post; $this->save_list[] = array('meta_key' => $meta_key); $default_atts = array( 'value' => false, 'class' => '' ); $atts = $atts + $default_atts; $atts['value'] = (!$atts['value']) ? get_post_meta($post->ID, $meta_key, true) : $atts['value']; extract($atts); print_r($this->save_list); ?> <input name="<?php echo $meta_key; ?>" type="text" class="<?php echo $class; ?>" value="<?php echo $value; ?>"> <?php } public function save_postmeta($post_id) { $save_list = $this->save_list; foreach ($save_list as $item) { $meta_key = $item['meta_key']; update_post_meta($post_id, $meta_key, $_POST[$meta_key]); } exit(var_dump($save_list)); } 

}

Тем не менее, вызов print_r($this->save_list) в методе text() работает нормально и соответственно сохраняет область видимости, например, каждый вызов ее добавляет к значению save_list при сбрасывании с этим вызовом.

Мне интересно, если это имеет какое-то отношение к действию save_post , или, может быть, я очень устал и сделал простую, обыденную ошибку.

Любая помощь будет принята с благодарностью!

(Если вы считаете, что это поможет в контексте, мой файл functions.php )

 $metabox = new Metabox; function add_input_metabox() { add_meta_box('text1', 'text1', 'input_metabox_callback', 'eating', 'side'); add_meta_box('text2', 'text2', 'input_metabox_callback_', 'eating', 'side'); } add_action('add_meta_boxes', 'add_input_metabox'); function input_metabox_callback() { global $metabox; $metabox->text('text3', array('class' => 'widefat')); $metabox->text('text4', array('class' => 'widefat')); } function input_metabox_callback_() { global $metabox; $metabox->text('text1', array('class' => 'widefat')); $metabox->text('text2', array('class' => 'widefat')); } 

Solutions Collecting From Web of "Свойство класса, похоже, теряет объем, прикрепленный к действию save_post?"

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

 $metabox = new Metabox; 

не делает переменную глобальной. Его нужно определить как глобальное. Но прежде чем продолжать и делать это, $metabox что рекомендуется держаться подальше от глобального масштаба, особенно с $metabox переменной типа $metabox .

Подумайте об этом, у вас есть два плагина, использующих одну и ту же переменную $metabox . Это отлично работает. Теперь вы определяете $metabox как глобальный в своей теме. Это изменяет значения для всех экземпляров $metabox которые приводят к вашим плагинам, используя неправильные данные, и не в том, что он должен делать.

ПРАВИЛЬНОЕ РЕШЕНИЕ

Создайте себе «глобальную функцию», которую вы можете повторно использовать, что-то вроде

 function metabox_global_function() { $metabox = new Metabox; return $metabox; } 

Затем вы можете использовать metabox_global_function(); где угодно в любой функции.