2017-10-03 28 views
0

タイトルの通り、メディアギャラリーのアップロードの名前を、ファイルが追加される最初の投稿のタイトルに変更しようとしています。添付ファイルの名前をWordpressで投稿されている投稿タイトルに変更します

私は次の関数を発見し、クライアントのために十分ではありませんでした、ファイルの作成者スラグ

// 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; 
} 

However-にファイル名を変更するには、それを修正。私はこれにはまだ解決策が見つかりませんでした。どんな助けでも大歓迎です!

編集 - これにも高度なカスタムフィールドを使用しています。ここでは、特定のディレクトリ -

// 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; 
} 

答えて

0

私は、あなたが$_POST["post_ID"]でできるような外観であるかもしれないと仮定使用に固有のカスタムフィールド画像を指示し、このプロセスのためのコードの残りの部分は、WPのget_post()、その後のポストが発見された場合ファイル名として$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); 
+0

私は応答janh2を感謝します!しかし、私はリネーム機能の中に投稿情報を得ることができません。私は彼らが標準的なワードプレスのメディアギャラリー機能を使用してアップロードされると信じています。 "uploadedToTitle": "Summer Haven"を含むイメージのアップロード後にコールバックが表示されますが、イメージが既にアップロードされた後に明らかに渡されるので、これを実装する方法がわかりません。 –

+0

私はエディターからトリガーされた一般的なメディアアップロード機能を使ってテストしました。 ajaxリクエストでは、POSTリクエストに 'data [wp-refresh-post-lock] [post_id] = 12345'(=それが所属する投稿のID)を追加します。多分あなたはそれを使うことができますか? – janh

+0

あなたはそうです、私もそれを見ています。私は次のことを試みましたが、何も表示されていません。しかし、あなたの助けをありがとう。 関数file_renamer($ filename){ $ info = pathinfo($ filename); $ ext = empty($ info ['extension'])? '': '。' 。 $ info ['extension']; $ name = basename($ filename、$ ext); 返品$ _POST ["post_ID"] $ ext; } –

関連する問題