【问题标题】:Renaming attachment files to the post title it's being added to in Wordpress将附件文件重命名为在 Wordpress 中添加到的帖子标题
【发布时间】:2017-10-04 05:36:30
【问题描述】:

正如标题所说,我正在尝试将媒体库上传重命名为文件添加到的初始帖子的标题。

我找到了以下函数并修改它以将文件名更改为文件的作者slug

// file renamer (used for EDL images)
function file_renamer( $filename ) {
  $info = pathinfo( $filename );
  $ext  = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
  $name = basename( $filename, $ext );
  global $current_user;
  get_currentuserinfo();

  return   $current_user->user_login . $ext;
}

但是,这对客户来说还不够好。我还没有在网上找到任何解决方案。任何帮助将不胜感激!

编辑 - 只是想补充一点,我也为此使用了高级自定义字段。这是此过程的其余代码,它将特定的自定义字段图像定向到某个目录-

// EDL uploaded images will go to the /edl directory in uploads for these fields.
add_filter('acf/upload_prefilter/name=edl_dealer_logo', 'field_name_upload_prefilter');
add_filter('acf/upload_prefilter/name=edl_image', 'field_name_upload_prefilter');
add_filter('acf/upload_prefilter/name=edl_gallery_image', 'field_name_upload_prefilter');

function field_name_upload_prefilter($file) {
// in this filter we add a WP filter that alters the upload path
add_filter( 'sanitize_file_name', 'file_renamer', 10 );
add_filter('upload_dir', 'field_name_upload_dir');
return $file;
}
// second filter
  function field_name_upload_dir($uploads) {

  $mydir = '/edl';
  // here is where we later the path
  $uploads['path'] = $uploads['basedir'].$mydir;
  $uploads['url'] = $uploads['baseurl'].$mydir;

  $uploads['subdir'] = '/edl';
  return $uploads;
}

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    我想你可以查看$_POST["post_ID"],使用 WP 的get_post(),然后如果找到帖子,请调用 get $post->post_title 获取文件名。

    或者 ACF 是否通过 Ajax 异步上传这些内容?无论如何,我相信上传时应该传输帖子 ID,但您可能需要查看浏览器的开发人员工具才能了解字段名称是什么。

    以下在我的安装中有效。请注意,这将适用于所有文件上传,因此您可能需要添加一些预防措施。

    function file_renamer( $filename ) {
        $info = pathinfo( $filename );
        $ext  = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
        $name = basename( $filename, $ext );
        if( $post_id = array_key_exists("post_id", $_POST) ? $_POST["post_id"] : null) {
            if($post = get_post($post_id)) {
                return $post->post_title . $ext;
            }
        }
        get_currentuserinfo();
    
        return   $current_user->user_login . $ext;
      }
    add_filter( 'sanitize_file_name', 'file_renamer', 10, 1 );
    

    【讨论】:

    • 感谢 janh2 的回复!但是我无法在重命名函数中获取任何帖子信息。我相信它们是使用标准的 wordpress 媒体库功能上传的。我在图片上传后看到一个回调,其中包括“uploadedToTitle”:“Summer Haven”,但我不确定如何实现这一点,因为它显然是在图片上传后传递的。
    • 我刚刚用编辑器触发的通用媒体上传功能对其进行了测试。在 ajax-request 中,它在 POST 请求中添加 data[wp-refresh-post-lock][post_id]=12345(=它所属的帖子的 ID)。也许你可以使用它?
    • 你说得对,我也看到了。我尝试了以下方法,但没有任何显示。不过谢谢你的帮助。函数 file_renamer( $filename ) { $info = pathinfo( $filename ); $ext = 空($info['extension'])? '':'。' . $info['extension']; $name = basename($filename, $ext);返回 $_POST["post_ID"] 。 $分机; }
    • 那一定是 $_POST["wp-refresh-post-lock"]["post_id"],我相信。它可以使用它而不是 $_POST["post_ID"] 吗?
    • 不幸的是,仍然一无所获。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多