Странное поведение с добавлением _ {$ meta_type} _metadata | Фильтр add_post_metadata

Я безуспешно пытаюсь использовать метаданные add _ {$ meta_type}. Этот фильтр вызывается внутри функции add_metadata (wp-includes / meta.php: 31 в WordPress 3.4.2). В частности, я хочу подключить фильтр «add_post_metadata» среди других. Моя цель – выполнить пользовательский код для добавления, обновления, получения настраиваемой мета, поэтому я не нарушаю способ WordPress, чтобы делать что-то.

тело функции add_metadata

function add_metadata($meta_type, $object_id, $meta_key, $meta_value, $unique = false) { [...] $check = apply_filters( "add_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $unique ); if ( null !== $check ) return $check; [...] 

$ ckeck после выполнения фильтра должно содержать значение, возвращаемое функцией "filter_negozi_add_metadata"

Это код, который я использую (внутри моего плагина):

  add_action('init', array('my_plugin','init')); class my_plugin { const META_KEY='my_plugin_key'; public static function init() { new self(); } public function __construct() { $this->add_filters(); } protected function add_filters() { ///function below works add_filter('get_post_metadata',array(&$this,'filter_negozi_get_metadata'),10,4); //the one below instead doesn't work $ret=add_filter('add_post_metadata',array(&$this,'filter_negozi_add_metadata'),10,5); //$ret contains true so add_filter works correctly } public function filter_negozi_add_metadata($foo=null,$object_id, $object_id, $meta_key, $meta_value, $unique ) { if($meta_key==self::META_KEY) { $ret='foo'; } return $ret; } } 

Действительно странным фактом является то, что глобальный $ wp_filter не содержит мою функцию, даже если $ ret является истинным. Благодарю.

Хорошо, я нашел решение … Мне пришлось вызывать add_filter вне моего класса плагинов, из-за приоритета надписей WordPress. С фактическим кодом я вызываю add_filter после события «init», возможно, слишком поздно. Если я переведу эту строку кода:

  add_filter('add_post_metadata',array(&$this,'filter_negozi_add_metadata'),10,5); 

В верхней части файла крючок работает, как и ожидалось. Итак, чтобы напомнить, это код wroking:

  add_action('init', array('my_plugin','init')); //filter goes here add_filter('add_post_metadata',array('my_plugin','filter_negozi_add_metadata'),10,5); class my_plugin { const META_KEY='my_plugin_key'; public static function init() { new self(); } public function __construct() { $this->add_filters(); } protected function add_filters() { add_filter('get_post_metadata',array(&$this,'filter_negozi_get_metadata'),10,4); } public static function filter_negozi_add_metadata($foo=null,$object_id, $meta_key, $meta_value, $unique ) { //if condition doesn't match return a null value to allow wordpress to behave in the standard way $ret=null; if($meta_key==self::META_KEY) { $ret='foo'; } return $ret; } }