J'essaie de télécharger une pièce jointe à l'aide du bouton "Ajouter un média" situé juste au-dessus de l'éditeur.
La demande est envoyée au fichier wp-admin/async-upload.php
. Je peux mettre un appel var_dump($_REQUEST);
ici.
Chaque fois que je télécharge une pièce jointe pour un article normal, le $_REQUEST
contient la clé post_id et la pièce jointe a cet article enregistré en tant que parent_post
.
Mais lorsque je fais de même pour un type de publication personnalisé que j'ai créé, la clé post_id
est manquante. Je ne sais pas pourquoi.
Nous avons essayé d'ajouter des points d'arrêt XHR à cette demande de téléchargement, mais ils ont tous pour résultat le code minified plupload.full.min.js qui semble abstrait des données qui y sont transmises. J'ai essayé de chercher le point d'entrée où il commence le téléchargement (et a probablement une condition préalable sur l'inclusion de l'identifiant de publication) mais je ne l'ai pas trouvé.
Une entrée masquée avec le post_id
correct est présente sur les deux pages.
Lorsque j'appelle media_handle_upload('file', $post_id);
depuis ailleurs dans le code, le fichier est joint comme prévu.
Pourquoi les demandes de téléchargement de type publication personnalisées omettent-elles post_id? Est-ce que quelque chose me manque dans la déclaration de type de poste?
S'il vous plaît aider
Ok cela semble l'avoir corrigé:
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' );
Cela prétraite le $params
de téléversement et s'assure que le post_id
est inclus.
Tiré de ici : https://core.trac.wordpress.org/attachment/ticket/22085/media .php.patch
La réponse de l'homme le plus sexy de la Jamaïque est la solution.
Pour mon utilisation, j’avais une instance personnalisée de wp.media avec un paramètre de type afin que je puisse me connecter aux téléchargements et ajuster les chemins des fichiers en fonction du type. Cela ou quelque chose d'autre que je faisais a pour résultat que post_parent est mis à zéro pour les pièces jointes.
En tout cas, j'ai peaufiné un peu les choses pour mes propres besoins:
/**
* 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'));