エディタの真上にある[メディアの追加]ボタンを使用して添付ファイルをアップロードしようとしています。
要求は wp-admin/async-upload.php
ファイルに送られます。 var_dump($_REQUEST);
呼び出しをそこに置くことができます。
通常の投稿の添付ファイルをアップロードすると、$_REQUEST
にpost_idキーが含まれ、添付ファイルにはその投稿がparent_post
として保存されます。
しかし、私が作成したカスタム投稿タイプに対して同じことをすると、post_id
キーがなくなります。その理由はわかりません。
そのアップロード要求にXHRブレークポイントを追加しようとしましたが、それらはすべて、それを通過するデータから抽象化されたように思われる最小化されたplupload.full.min.jsコードにつながります。私はそれがそのアップロードを開始するエントリーポイントを検索しようとしました(そしておそらくポストIDを含めるべきかどうかに関して何らかの条件があります)が、それを見つけることができませんでした。
両方のページに、正しいpost_id
を含む隠し入力があります。
コードの他の場所からmedia_handle_upload('file', $post_id);
を呼び出すと、ファイルは期待どおりに添付されます。
カスタム投稿タイプのアップロードリクエストでpost_idが省略されるのはなぜですか?ポストタイプの宣言に何か足りないのですか?
助けてください
さて、これで修正されたようです
function wp_plupload_include_attachment_id( $params ) {
global $post_ID;
if ( isset( $post_ID ) )
$params['post_id'] = (int) $post_ID;
return $params;
}
add_filter( 'plupload_default_params', 'wp_plupload_include_attachment_id' );
これはアップローダ$params
を前処理し、post_id
が含まれることを確認します。
から取得したものです : https://core.trac.wordpress.org/attachment/ticket/22085/media .php.patch
ジャマイカで一番セクシーな男 の答えは修正です。
私の使用のために、アップロードにフックしてタイプに基づいてファイルパスを調整できるように、typeパラメータを持つカスタムのwp.mediaインスタンスを持っていました。それ以外の場合は、添付ファイルに対してpost_parentがゼロに設定されています。
いずれにせよ、私は自分のニーズに合わせて少し微調整しました。
/**
* Ensure our custom upload type has a post (parent) ID
* Without this attachments have a post_parent of 0
* @since 1.0.0
*/
function plupload_params ($params) {
global $post;
if (isset($post) && $post->post_type == 'my_custom_type') {
$params['post_id'] = $post->ID;
}
return $params;
} // End plupload_params()
add_filter('plupload_default_params', 'plupload_params'));