WordPress Media Library перехватывает и фильтрует переменные между двумя функциями

По какой-то причине сегодня PHP уделяет большое внимание настройке некоторых фильтров в WordPress, Вопрос в том, как передать переменные между двумя функциями, которые являются фильтрами?

Я ищу, чтобы использовать крюк WordPress upload_dir а также pre-upload-ui чтобы обеспечить средство загрузки элементов непосредственно в выбранную папку, но все же использовать встроенный загрузчик.

Первая функция ниже устанавливает каталог загрузки для загрузчика, и при использовании с заранее заданным значением, таким как _PLAY загружает файлы в нужный каталог на сервере — отлично 🙂

if (!function_exists ('lf_media_uploader_dir')) {
function lf_media_uploader_dir ($upload) {
$lf_up_dir = '/_PLAY';
//  I am trying to get the value of the selected directory
//  from the function lf_upload_prefilter, as this is a means
//  of hooking into the top of the media uploader.
$lf_up_dir = apply_filters ('lf-upload-filter');
$upload['subdir'] = $lf_up_dir;
$upload['path']   = $upload['basedir'] . $lf_up_dir;
$upload['url']    = $upload['baseurl'] . $lf_up_dir;
return $upload;
}
}
add_filter ('upload_dir', 'lf_media_uploader_dir', 99);

Теперь, чтобы привязать к странице загрузчика, я схватился за крючок pre-upload-ui, В следующей функции он правильно отображает сообщение «pre», поэтому я знаю, что оно вызывается. Но что бы я ни пытался, включая глобальные переменные, я не могу передать значение обратно из этой функции в lf_media_uploader_dir,

Вот вторая функция, которая в настоящее время устанавливает статическое значение после отображения сообщения на панели Media Uploader.

if (!function_exists ('lf_upload_prefilter')) {
function lf_upload_prefilter ($lf_dir_select) {
echo '<pre>Filter Fired pre-upload-ui</pre>';
//Set a dummy value, later provide a selector box.
$lf_dir_select = '/_PLAY';
}
}
add_filter('pre-upload-ui','lf_upload_prefilter',99);

3

Решение

Вы бы пойти с Учебный класс для этого и использовать его свойства для доступа к общим значениям среди методов (функций).

Поскольку все включено в класс, вам не нужно все это if function_exists() ни пользовательские префиксы для имен функций.

Здесь небольшое доказательство концепции, которая должна быть адаптирована к вашим потребностям. Все ваши фильтры будут срабатывать, когда plugins_loaded доступен.

class SO_50955282 {

public $common_var = '';

public function __construct() {
add_action( 'plugins_loaded', array( $this, 'start' ) );
}

public function start() {
add_filter( 'upload_dir', array( $this, 'media_uploader_dir' ), 99);
add_filter( 'pre-upload-ui', array( $this, 'upload_prefilter' ), 99);
}

public function media_uploader_dir() {
$this->common_var = 'something';
}

public function upload_prefilter() {
echo 'Common variable is: ' . $this->common_var;
}

}

new SO_50955282();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]