web-dev-qa-db-ja.com

wp-adminファイルのアップグレード要求にpost_idがありません

エディタの真上にある[メディアの追加]ボタンを使用して添付ファイルをアップロードしようとしています。

要求は 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が省略されるのはなぜですか?ポストタイプの宣言に何か足りないのですか?

助けてください

2
aexl

さて、これで修正されたようです

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

2
aexl

ジャマイカで一番セクシーな男 の答えは修正です。

私の使用のために、アップロードにフックしてタイプに基づいてファイルパスを調整できるように、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'));
1