J'ai un formulaire sur mon site.
Cet utilisateur enregistre une personne disparue. J'ai créé une personne manquante de type publication personnalisée, des taxonomies personnalisées et des champs personnalisés. Toutes ces entrées sont également sauvegardées dans wp.
Mais je ne sais pas soumettre une image et enregistrer cette image en tant qu'image sélectionnée.
$my_post = array(
'post_title' => $_POST['title'],
'post_date' => $_SESSION['cal_startdate'],
'post_content' => $_POST['myContent'],
'post_status' => 'draft',
'post_type' => 'pessoa_desaparecida',
);
$post_id = wp_insert_post($my_post);
$uploaddir = wp_upload_dir();
$file = $_FILES["test"]["name"];
$uploadfile = $uploaddir['path'] . '/' . basename( $file );
move_uploaded_file( $file , $uploadfile );
$filename = basename( $uploadfile );
$wp_filetype = wp_check_filetype(basename($filename), null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
'post_content' => '',
'post_status' => 'inherit',
'menu_order' => $_i + 1000
);
$attach_id = wp_insert_attachment( $attachment, $uploadfile );
update_post_meta($post_id,'_thumbnail_id',$attach_id);
set_post_thumbnail( $post_id, $thumbnail_id );
mais ne fonctionne pas
Mon formulaire en frontend est:
<form action="/homolog/cadastro" method="post" enctype="multipart/form-data">
<input type="text" name="title" />
<input type="file" size="20" name="test" />
</form>
IMPRESSION:
désolé, ce n’est pas une réponse, mais vous devez supprimer cette entrée utilisateur. Vos balises autorisant l'écriture directement dans le contenu de votre publication, ce qui permet à quiconque de lancer JavaScript dans wp admin et sur le front-end de votre site (en supposant que vous imprimiez éventuellement ces publications). fortement recommandé (au minimum) strip_tags () ou htmlspecialchars () sur toutes les chaînes d'entrée de l'utilisateur. il existe des solutions meilleures/alternatives mais c'est au moins un bon début sans trop entrer dans les détails.
En théorie, le titre poserait problème, mais je suis sûr que WordPress en supprimera les balises. Cependant, WordPress autorise les balises de script dans le contenu du message afin que les utilisateurs puissent utiliser les codes intégrés.
si vous ne connaissez pas les risques de ne pas supprimer les entrées de l'utilisateur, identifiez-vous avec encore plus de prudence lors du traitement des téléchargements de fichiers. télécharger un fichier malveillant ou faire appel à des milliers d'utilisateurs de vos sites Web pourrait être bien pire que de faire fonctionner du javascript malveillant dans votre navigateur. Heureusement, wp_insert_post empêchera au moins l’injection SQL sur votre entrée utilisateur complètement brute.
ma seule recommandation supplémentaire est de vérifier au moins les types de mime autorisés et d'utiliser les fonctions WordPress chaque fois que possible pour gérer les téléchargements, en supposant qu'ils puissent offrir une protection contre les fichiers malveillants, mais à part cela, je ne peux pas vous donner grand conseil. en toute sécurité (même si je l'ai déjà fait auparavant ... je n'ai pas accès à ce code pour le moment).
Vous pouvez essayer de cette façon:
set_post_thumbnail( $my_post_id, $thumbnail_id );
Vous devez d'abord ajouter une image dans la bibliothèque de cette façon:
$uploaddir = wp_upload_dir();
$file = $_FILES[ ... whatever you have in your POST data ... ];
$uploadfile = $uploaddir['path'] . '/' . basename( $file );
move_uploaded_file( $file , $uploadfile );
$filename = basename( $uploadfile );
$wp_filetype = wp_check_filetype(basename($filename), null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
'post_content' => '',
'post_status' => 'inherit',
'menu_order' => $_i + 1000
);
$attach_id = wp_insert_attachment( $attachment, $uploadfile );
Pour plus de détails s'il vous plaît voir ce lien
Tout d’abord, vous devriez vérifier si votre thème prend en charge les vignettes et que votre personne manquante CPT le prend également en charge. Si vous créez votre CPT via le codage PHP, vérifiez les points suivants:
add_theme_support( 'post-thumbnails' );
register_post_type( 'yourposttype', array(
...,
'supports' => array('title', ...,'thumbnail'),
));
}
Ensuite, si cela est correct, le code dans la réponse ci-dessous devrait fonctionner.