Setarea Imaginii Reprezentative din Formularul Frontend
M-am luptat câteva zile să rezolv această problemă. Am reușit să implementez cu succes un formular pentru a trimite articole din frontend-ul site-ului meu. Dar nu reușesc să fac să funcționeze încărcarea imaginilor.
Vreau ca orice imagine pe care o încarcă utilizatorul să se atașeze automat la articol și să devină imaginea reprezentativă.
Poate cineva să-mi explice cum să fac acest lucru cu codul meu existent?
Am căutat prin toate întrebările relevante de pe acest forum și niciuna dintre soluții nu funcționează pentru mine.
<?php
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['insert_post'] )) { //verificăm dacă formularul nostru a fost trimis
//Dacă a fost trimis, redirecționează către dashboard
?><script language="javascript"><!--
location.replace("/dashboard/")
//-->
</script> <?php
$title = $_POST['thread_title']; //setăm titlul nostru
if ($_POST['thread_description']=="") { // verificăm dacă a fost introdusă o descriere
$description = "Vezi titlul discuției..."; // dacă nu, folosim placeholder
} else {
$description = $_POST['thread_description']; //dacă da, o folosim
}
$tags = $_POST['thread_tags']; //încărcăm tag-urile discuției (taxonomie personalizată) într-un array
$post = array( //argumentele noastre pentru wp_insert_post
'post_title' => wp_strip_all_tags($title),
'post_content' => $description,
'post_category' => array('0' => $_POST['cat']),
'tax_input' => array('thread_tag' => $tags),
'post_status' => 'publish',
'post_type' => 'tsv_userpost'
);
$my_post_id = wp_insert_post($post); //trimitem articolul nostru, salvăm ID-ul rezultat
$current_user = wp_get_current_user(); //verificăm cine este conectat
add_post_meta($my_post_id, '_your_custom_meta', $var); //adăugăm meta date personalizate, după ce articolul este inserat
} else {
if(is_user_logged_in()) { // verificăm dacă utilizatorul este conectat înainte de a prezenta formularul
$current_user = wp_get_current_user();
?>
<div id="postbox">
<form id="new_thread" name="new_thread" method="post" action="" enctype="multipart/form-data">
<input class="required" type="text" id="thread_title" value="" tabindex="1" name="thread_title" placeholder="Titlul Discuției" />
<textarea id="thread_description" name="thread_description" cols="80" rows="20" tabindex="2"></textarea>
<div class="left">
<select name='cat' id='cat' class='postform required' tabindex="3">
<option value="" selected="selected">Alege:</option>
<option class="writing" value="90">Scriere</option>
<option class="image" value="91">Imagine</option>
<option class="video" value="92">Video</option>
<option class="audio" value="94">Audio</option>
<option class="link" value="95">Link</option>
</select>
</div>
<input type="text" value="" tabindex="4" size="16" name="thread_tags" id="thread_tags" placeholder="Etichete" />
<br />
<!-- imagini -->
<label for="images">Imagine Reprezentativă:</label>
<input type="file" name="user-image-featured" id="user-image-featured" size="20">
<!-- Buton Trimitere-->
<br />
<input type="submit" value="Salvează Articolul" tabindex="5" id="thread_submit" name="thread_submit" class="thread-button" />
<input type="hidden" name="insert_post" value="post" />
<?php wp_nonce_field( 'new_thread' ); ?>
</form>
</div>
<?php } else { echo 'vă rugăm să vă conectați'; } } ?>

poți face asta rulând funcția
set_post_thumbnail( $my_post_id, $thumbnail_id );
reține, trebuie mai întâi să procesezi și să introduci imaginea în bibliotecă:
$uploaddir = wp_upload_dir();
$file = $_FILES[ ... orice ai în datele tale POST ... ];
$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 );
nu am testat scriptul - este adaptat dintr-o versiune creată de mine. poate vei dori să modifici numele fișierului și alte detalii, dar în principiu funcționează astfel :)

Mulțumesc! Am experimentat cu funcții similare fără succes. Poate pun codul în locul greșit? Unde ar trebui plasate cele două fragmente de cod în exemplul de mai sus?

nu contează cu adevărat. poți crea postul înainte de atașament sau invers, singurul lucru important este să ai ambele create când apelezi set_post_thumbnail( $my_post_id, $thumbnail_id );

Acest lucru funcționează corect!
$uploaddir = wp_upload_dir();
$file = $_FILES["post_Fimage"]["name"];
$uploadfile = $uploaddir['path'] . '/' . basename( $file );
move_uploaded_file( $_FILES["post_Fimage"]["tmp_name"] , $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 );
//echo "<pre>";print_r($wp_filetype);echo "</pre>";
//echo "<pre>";print_r($_FILES);echo "</pre>";
set_post_thumbnail( $post_id, $attach_id );

/******* Acest cod funcționează pentru mine! ********/
$uploaddir = wp_upload_dir();
$file = $_FILES["post_Fimage"]["name"];
$uploadfile = $uploaddir['path'] . '/' . basename( $file );
move_uploaded_file( $_FILES["post_Fimage"]["tmp_name"] , $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 );
set_post_thumbnail( $post_id, $attach_id );

Pot să repar codul tău?
$uploaddir = wp_upload_dir();
$file = $_FILES[ ... orice ai în datele tale POST ... ];
$uploadfile = $uploaddir['path'] . '/' . basename( $file['name'] );
move_uploaded_file( $file['tmp_name'] , $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 );

Am aceeași problemă. Imaginea reprezentativă nu este importată corect în articolul trimis prin front-end. Pot vedea imaginea în biblioteca de media, așa că știu că funcționează până în acel punct.
Această funcție funcționează până la '//funcția funcționează până aici'. Poate cineva să mă ajute?
function save_post ( $form ){
$errors = array();
$form_setting = $form->get_settings();
$form_fields = $form->get_fields();
$form_fields_files = $form->get_uploaded_files();
$form_id = $form_fields['formId'];
if ($form_id === 'fxuqcf') {
$post_title = isset($form_fields['post-titel']) ? $form_fields['post-titel'] : '';
$post_content = isset($form_fields['post-bericht']) ? $form_fields['post-bericht'] : '';
$post_category_name = isset($form_fields['post-categorie']) ? $form_fields['post-categorie'] : '';}
//obține numele categoriei
$post_category_id = get_category_by_slug($post_category_name)->term_id;
if (!$post_category_id) {
$errors[] = 'nume categorie invalid';
return $errors;}
//creează array-ul pentru postare
$new_post = array(
'post_type' => 'post',
'post_title' => $post_title,
'post_content' => $post_content,
'post_status' => 'publish',
'post_category' => array($post_category_id),);
//inserează postarea
$post_id = wp_insert_post($new_post);
//verifică dacă postarea este creată corect
if ($post_id && is_wp_error($post_id)){
//funcția funcționează până aici
if (!empty($form_fields_files['post-afbeelding'])){
$uploaded_files = $form_fields_files['post-afbeelding'];
$file = $uploaded_files[0];
$file_array = array(
'name' => basename($file['file']),
'tmp-name' => $file['file']);
if (file_exist($file['file'])){
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attachment_id = media_handle_sideload($file_array, $post_id);
if (is_wp_error($attachment_id)){
$errors[] = 'Există o eroare cu imaginea:' . $attachment_id->get_error_message();
}else {
$attachment_id = wp_insert_attachment();
set_post_thumbnail($post_id, $attachment_id);
}
}else {
$errors[] = 'Fișierul încărcat nu există.' ;
}
}
}
}
