J'essaie de récupérer et d'insérer des images en dehors de l'environnement wordpress dans un message personnalisé via PHP.
Comment déplacer / télécharger cette image vers le format de dossier de date d'annuaire de téléchargement de wordpress tout comme wordpress et définir cette image en tant qu'image en vedette par rapport à la publication personnalisée?
Aussi pour télécharger une image vers une galerie d'articles personnalisée?
Voici mon code
$filename = $image['name'];
$target_path = "../wp-content/uploads/";
$target_path = $target_path . $filename;
$wp_filetype = wp_check_filetype(basename($filename), null );
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['baseurl'] . '/' . basename( $filename ),
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
'post_content' => '',
'post_status' => 'inherit',
);
$attach_id = wp_insert_attachment( $attachment, $target_path, $post_id );
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
set_post_thumbnail( $post_id, $attach_id );
J'ai réussi à télécharger l'image dans mon répertoire de téléchargements, mais je ne peux pas créer le dossier de l'année et de la date. ce qu'il y a une fonction wp pour cela ??
la source
media_sideload_image
pour'id'
et il va retourner le nouvel identifiant de pièce jointe. Par exemple:$new_att_id = media_sideload_image($image, $post_id, "image description...", 'id'); if(!is_wp_error($new_att_id)) { set_post_thumbnail($post_id, $new_att_id); }
Essayez cette explication du téléchargement à l'aide d'un chemin d'accès et d'un ID de publication .
Voici le code (pour l'héritage):
la source
Veuillez vous référer au code suivant qui définit l'image sélectionnée par programme. http://www.pearlbells.co.uk/code-snippets/set-featured-image-wordpress-programmatically/
la source
Peut-être que je me méprends, mais pourquoi voudriez-vous faire cela en dehors de l'environnement WordPress? Répliquer cette fonctionnalité serait beaucoup de travail! WordPress fait bien plus que simplement télécharger le fichier et le placer dans un répertoire spécifique, par exemple contrôler quels utilisateurs sont autorisés à télécharger des fichiers, ajouter des enregistrements de base de données pour les téléchargements et configurer les relations d'image en vedette, exécuter des actions et des filtres pour les plugins externes dépendants de téléchargement de fichiers - tout en respectant les paramètres du site (en ce qui concerne les conventions de dénomination, l'emplacement de téléchargement des médias, etc.).
Si vous cherchez simplement à télécharger des fichiers sans être connecté à la section d'administration de WordPress, par exemple pour télécharger des fichiers à partir d'un site externe, vous voudrez peut-être jeter un œil à l' API XML-RPC et en particulier à la
uploadFile
méthode.Une autre option pourrait être d'écrire vous-même une mini API. Fondamentalement, ce que vous voudriez faire est le suivant:
wp_upload_dir()
pour obtenir le chemin du répertoire de téléchargement etsanitize_file_name()
pour construire le chemin et écrire le fichier à l'emplacement résultant.wp_insert_attachment()
pour stocker la pièce jointe dans la base de données (wp_check_filetype()
sera utile pour le réglagepost_mime_type
). Optionnellement également définipost_parent
et la_thumbnail_id
touche méta si vous le souhaitez.wp_create_nonce()
etwp_verify_nonce()
pour rendre le formulaire un peu plus sûr.la source
wp_insert_attachment()
, il devrait faire beaucoup de ce dont vous avez besoin, je pense. Je déconseille fortement de modifier manuellement la base de données en dehors de WordPress si c'est ce que vous faites. À la place, regardez simplement la source WordPress et essayez d'identifier les parties responsables de l'ajout de données de publication, de la gestion des téléchargements de fichiers et de l'insertion de pièces jointes. En d'autres termes, à peu près ce que j'ai décrit dans ma réponse ci-dessus.