サポート » 使い方全般 » 画像アップロード時にファイルのフルパスを取得したい

  • 解決済 toakts0024

    (@toakts0024)


    アップローダーを利用し画像をアップロードした際にその画像のファイル名を含めたパスを取得し処理を行いたいとと思っています。

    色々調べてみたところ
    wp_generate_attachment_metadata
    wp_update_attachment_metadata

    上記にフックすれば取得できそうだと思い実装したのですが、いまいち正常に動作しません。

    連続で複数枚アップロードした際に最初に1枚しか動作しておりません。

    下記がテストで作成したソースになります。

    
    function media_copy( $img_meta ) {
     
        /* 処理する内容 */
        $file = get_template_directory() . '/pubdate.txt';
        file_put_contents( $file, json_encode($img_meta, JSON_UNESCAPED_UNICODE));
        return $img_meta;
    }
    
    add_filter( 'wp_generate_attachment_metadata', 'media_copy' );
    add_filter( 'wp_update_attachment_metadata', 'media_copy' );
    

    画像がアップロードされる度に処理を行うには、どのようなフックを行えばよろしいでしょうか?

    また、関係あるか分かりませんが、アップロード先を投稿タイプ名+記事IDに変更する下記処理も行っております。

    
    add_filter( 'upload_dir', 'change_upload' );
    
    function change_upload( $upload ) {
    
    	$id = intval( $_REQUEST[ 'post_id' ] );
    	$dir = get_post_type( $id ) ? : 'images';
    	
    	
    	if ( $dir == "images" ) {
    		$upload[ 'subdir' ] = "/" . $dir;
    	} else {
    		$upload[ 'subdir' ] = "/" . $dir . "/" . $id;
    	}
    	$upload[ 'path' ] .= $upload[ 'subdir' ];
    	$upload[ 'url' ] .= $upload[ 'subdir' ];
    	return $upload;
    }
    

    何卒宜しくお願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 原因かどうかわかりませんが、フィルター wp_generate_attachment_metadata と wp_update_attachment_metadata のパラメータは2個なので、手始めにその点を直してはどうでしょう。

    参考1: Reference / Hooks / wp_generate_attachment_metadata
    参考2: Reference / Hooks / wp_update_attachment_metadata

    Katsushi Kawamori

    (@katsushi-kawamori)

    フィルターではなく、アクションフックadd_attachmentですがいかがでしょうか?

    add_action( 'add_attachment', 'per_user_upload', 10 );
    function per_user_upload( $attach_id ){
    	echo get_attached_file($attach_id); // file path
    	echo wp_get_attachment_url($attach_id); // url
    }

    wp_handle_upload フィルターフックなんかもいいかもです。

    function my_handle_upload( $upload, $context ) {
    	$file = get_template_directory() . '/pubdate.txt';
    	if ( ! file_put_contents( $file, json_encode( $upload, JSON_UNESCAPED_UNICODE ), FILE_APPEND ) ) {
    		$upload['error'] = 'エラーだよ!';
    	}
    	return $upload;
    }
    add_filter( 'wp_handle_upload', 'my_handle_upload', 10, 2 );

    連続で複数枚アップロードした際に最初に1枚しか動作しておりません。

    は、file_put_contents() を上書き(第3引数に FILE_APPEND フラグなし)で使用しているため、最後の1枚しか書き込まれていないのではないでしょうか。

    • この返信は5年、 9ヶ月前にishitakaが編集しました。
    トピック投稿者 toakts0024

    (@toakts0024)

    ご返信ありがとうございます。

    教えて頂いたwp_generate_attachment_metadataのパラメータ設定、wp_handle_upload、add_attachmentを試したところ、その全てで希望の動作が確認出来ました!

    ご協力ありがとうございました!

    • この返信は5年、 9ヶ月前にtoakts0024が編集しました。
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「画像アップロード時にファイルのフルパスを取得したい」には新たに返信することはできません。