WordPress媒体库挂钩和过滤器在2个函数之间传递变量

时间:2018-06-20 18:59:52

标签: php wordpress media-library

出于某种原因,今天的PHP正在努力在WordPress中设置一些过滤器,问题是如何在两个函数(过滤器)之间传递变量?

我希望利用WordPress钩子upload_dirpre-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

这是第二个功能,当前在“媒体上载器”窗格上显示消息后,当前设置一个静态值。

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);

1 个答案:

答案 0 :(得分:0)

为此,您需要使用Class并使用其properties来访问方法(函数)之间的公用值。

由于所有内容都封装在该类中,因此不需要所有这些 <script> $(document).ready(function () { $('#datepicker').datepicker({ uiLibrary: 'bootstrap4' }); //load current date into datapicker var now = new Date(); var day = ("0" + now.getDate()).slice(-2); var month = ("0" + (now.getMonth() + 1)).slice(-2); var today = month + '/' + day + '/' + now.getFullYear(); //alert(today); $('#datepicker').val(today); //$("#RideDate").val(now.getFullYear() + "-" + month + "-" + day); // not needed $("#fixtime").click(function () { var fix = $("#datepicker").val(); // from datepicker mm/dd/yyyy to ASP yyyy-mm-dd var fix2 = fix.substr(6) + "-" + fix.substr(0, 2) + "-" + fix.substr(3, 2); $("#RideDate").val(fix2); //alert("ride date = " + $("#RideDate").val()); }); }); </script>或函数名称的自定义前缀。

这里有一个小的概念证明,需要适应您的需求。 if function_exists()可用时,您的所有过滤器都会触发。

plugins_loaded