Setarea Imaginii Reprezentative din Formularul Frontend

13 nov. 2012, 11:31:25
Vizualizări: 21.1K
Voturi: 7

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'; } } ?>
0
Toate răspunsurile la întrebare 6
3

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 :)

13 nov. 2012 12:14:00
Comentarii

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?

Eckstein Eckstein
13 nov. 2012 19:44:53

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 );

fischi fischi
14 nov. 2012 12:32:17

apropo, imaginea ta este încărcată corect? încearcă print_r( $_FILES ) pentru a verifica dacă ai configurația corectă și imaginea disponibilă.

fischi fischi
14 nov. 2012 12:33:04
0

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 ); 
23 feb. 2018 09:29:48
1

/******* 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 ); 
23 feb. 2018 09:20:49
Comentarii

Te rog să adaugi mai multe detalii în răspunsul tău.

Christine Cooper Christine Cooper
23 feb. 2018 13:07:34
2

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 );
10 sept. 2014 00:13:32
Comentarii

Te rog să adaugi o explicație la răspunsul tău: de ce ar putea rezolva problema?

fuxia fuxia
10 sept. 2014 01:58:55

scuze, $_FILES are câmpuri precum ["name"] și ["tmp_name"] care trebuie folosite, altfel încărcarea fișierului nu va funcționa

biancardi biancardi
10 sept. 2014 08:58:04
0

Este posibil să dori să încerci să bifezi mai întâi caseta reCAPTCHA dacă folosești acest serviciu. reCAPTCHA va preveni orice postare sau solicitare GET.

17 mar. 2020 10:56:22
0

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ă.' ;
                }
            }
        }
    }   
5 dec. 2024 12:09:23