Trimite postare și încarcă imagine din front-end
Încerc să fac ceva similar cu întrebarea de mai sus. Încerc să permit utilizatorilor să posteze și să încarce imagini din front-end. Am creat deja formularul de postare și funcționează.
Am urmărit și am încercat răspunsul postat de Robin I Knight încărcare-imagine-reprezentativă-din-front-end. Din păcate nu am reușit să îl fac să funcționeze. Este ceva ce ar trebui să modific sau să editez?
Mulțumesc.

Dacă vorbești despre răspunsul pe care l-am postat aici, acesta presupune pur și simplu încărcarea unui fișier într-un iframe pentru a obține un submit "asemănător cu Ajax".
Acum, dacă deja ai un formular care gestionează trimiterea postării, poți pur și simplu să adaugi câmpul de încărcare fișier în formularul tău:
<form ...
...
<input type="file" name="thumbnail" id="thumbnail">
...
...
</form>
Asigură-te că formularul tău are atributul enctype="multipart/form-data"
.
Apoi, în scriptul de procesare al formularului, după ce ai creat postarea (presupunând că folosești wp_insert_post();
), păstrează ID-ul postării într-o variabilă nouă:
$new_post = wp_insert_post($post_array);
Și după aceea adaugă:
if (!function_exists('wp_generate_attachment_metadata')){
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
}
if ($_FILES) {
foreach ($_FILES as $file => $array) {
if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
return "upload error : " . $_FILES[$file]['error'];
}
$attach_id = media_handle_upload( $file, $new_post );
}
}
if ($attach_id > 0){
//iar dacă dorești să setezi acea imagine ca imagine reprezentativă a postării, folosește:
update_post_meta($new_post,'_thumbnail_id',$attach_id);
}
Și imaginea ta va fi încărcată și salvată ca imagine reprezentativă a postării.

Mulțumesc @Bainternet. M-am chinuit să fac să insereze thumbnail-ul, dar din nu știu ce motiv când am înlocuit '$new_post' cu '$pid' a inserat thumbnail-ul postării

haha sunt atât de prost. Abia acum am înțeles de ce a trebuit să folosesc '$pid'
aveam această linie $pid = wp_insert_post($new_post);

Mă bucur că ai reușit să rezolvi, și și mai bine că ai înțeles logica din spate.

Da, mulțumesc mult pentru ajutor. Acum că am înțeles, e timpul să adaug puțin ajax :)

@Bainternet♦ mulțumesc pentru răspuns, e de ajutor, dar cum să-l fac să funcționeze cu mai multe imagini. Am schimbat input-ul meu în <input type="file" id="image" name="image[]" multiple="multiple" > dar nu încarcă nimic. - vă rog ajutați-mă?

Marcaj HTML:
<p>
<label for="custom-upload">Încarcă imagine nouă:</label>
<input type="file" tabindex="3" name="custom-upload" id="custom-upload" />
</p>
<?php
/*Preluarea imaginii*/
$attachment = get_post_meta($postid, 'custom_image');
if($attachment[0]!='')
{
echo wp_get_attachment_link($attachment[0], 'thumbnail', false, false);
}
?>
Încărcarea imaginii:
<?php
global $post; /*Obiectul global post*/
$post_id = $post->ID; /*Obținerea ID-ului postului curent*/
$upload = $_FILES['upload']; /*Recepționarea imaginii încărcate din formular*/
add_custom_image($post_id, $upload); /*Apelarea funcției de încărcare a imaginii*/
function add_custom_image($post_id, $upload)
{
$uploads = wp_upload_dir(); /*Obținerea căii directorului de încărcare din WordPress*/
if (is_writable($uploads['path'])) /*Verificarea dacă directorul de încărcare are permisiuni de scriere*/
{
if ((!empty($upload['tmp_name']))) /*Verificarea dacă imaginea încărcată nu este goală*/
{
if ($upload['tmp_name']) /*Verificarea dacă imaginea a fost încărcată în directorul temporar*/
{
$file=handle_image_upload($upload); /*Apelarea funcției noastre personalizate pentru a ÎNCĂRCA EFECTIV imaginea*/
$attachment = array /*Crearea atașamentului pentru postul nostru*/
(
'post_mime_type' => $file['type'], /*Tipul atașamentului*/
'post_parent' => $post_id, /*ID-ul postului*/
);
$aid = wp_insert_attachment($attachment, $file['file'], $post_id); /*Inserarea atașamentului postului și returnarea ID-ului atașamentului*/
$a = wp_generate_attachment_metadata($aid, $file['file'] ); /*Generarea metadatelor pentru noul atașament*/
$prev_img = get_post_meta($post_id, 'custom_image'); /*Obținerea imaginii încărcate anterior*/
if(is_array($prev_img))
{
if($prev_img[0] != '') /*Dacă imaginea există*/
{
wp_delete_attachment($prev_img[0]); /*Ștergerea imaginii anterioare*/
}
}
update_post_meta($post_id, 'custom_image', $aid); /*Salvarea ID-ului atașamentului în metadate*/
if ( !is_wp_error($aid) )
{
wp_update_attachment_metadata($aid, wp_generate_attachment_metadata($aid, $file['file'] ) ); /*Dacă nu există eroare, actualizarea metadatelor pentru imaginea nou încărcată*/
}
}
}
else
{
echo 'Vă rugăm să încărcați imaginea.';
}
}
}
function handle_image_upload($upload)
{
global $post;
if (file_is_displayable_image( $upload['tmp_name'] )) /*Verificarea dacă este imagine*/
{
/*manipularea fișierului încărcat*/
$overrides = array('test_form' => false);
$file=wp_handle_upload($upload, $overrides);
}
return $file;
}
?>
