По какой-то причине сегодня 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);
Вы бы пойти с Учебный класс для этого и использовать его свойства для доступа к общим значениям среди методов (функций).
Поскольку все включено в класс, вам не нужно все это 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();
Других решений пока нет …