Adăugare elemente de tip custom post din frontend

3 nov. 2012, 06:41:47
Vizualizări: 32.2K
Voturi: 5

Încerc să găsesc o modalitate prin care site-ul meu WordPress să permită adăugarea elementelor de tip portfolio din frontend. Plugin-uri precum WP-User-Frontend permit postarea din frontend, dar funcționează doar cu articole de blog.

Există vreo modalitate sau plugin-uri similare cu WP-User-Frontend care să permită adăugarea elementelor de tip custom post type?

0
Toate răspunsurile la întrebare 3
3
12

Dacă sunteți dispus să plătiți pentru asta, plugin-ul Gravity Forms vă permite să creați formulare care se mapează la Tipurile Voastre Personalizate de Postări (chiar și la tipurile obișnuite de postări și pagini) precum și la câmpurile personalizate.

Pentru cei care nu doresc să plătească și sunt dispuși să se apuce de treabă, puteți crea un formular în partea frontală care trimite date în orice tip de postare aleasă de voi destul de ușor.

Iată un exemplu de bază;

if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "my_post_type") {

//stocăm variabilele post în variabile pentru utilizare ulterioară
//acum ar fi un moment bun pentru a face o verificare/validare de bază a erorilor
//pentru a ne asigura că datele pentru aceste valori au fost setate
$title     = $_POST['title'];
$content   = $_POST['content'];
$post_type = 'my_custom_post';
$custom_field_1 = $_POST['custom_1'];
$custom_field_2 = $_POST['custom_2'];    

//tabloul de argumente care vor fi inserate cu wp_insert_post
$new_post = array(
'post_title'    => $title,
'post_content'  => $content,
'post_status'   => 'publish',          
'post_type'     => $post_type 
);

//inserăm postarea în baza de date prin transmiterea lui $new_post la wp_insert_post
//stocăm ID-ul postării în variabila $pid
$pid = wp_insert_post($new_post);

//acum folosim $pid (ID-ul postării) pentru a adăuga metadatele postării
add_post_meta($pid, 'meta_key', $custom_field_1, true);
add_post_meta($pid, 'meta_key', $custom_field_2, true);

}

Formularul dvs. HTML ar arăta cam așa;

<form method="post" name="front_end" action="" >
<input type="text" name="title" value="Titlul Postării Mele" />
<input type="text" name="content" value="Conținutul Postării Mele" />
<input type="text" name="custom_1" value="Conținutul Câmpului Personalizat 1" />
<input type="text" name="custom_2" value="Conținutul Câmpului Personalizat 2" />
<button type="button">Trimite</button>
<input type="hidden" name="action" value="my_post_type" />
</form>

Puteți plasa toate acestea în fișierul șablon al temei. În mod normal, aș merge un pas mai departe și aș rula logica de procesare (PHP) dintr-o funcție din functions.php legată de o acțiune, însă va funcționa și dintr-un fișier de temă.

Acesta este doar un exemplu de bază și este lipsit de orice verificare și validare serioasă a erorilor. Cu toate acestea, acest lucru vă oferă cadrul esențial de care aveți nevoie pentru a trimite din partea frontală către tipurile de postări din partea din spate.

Există și numeroase tutoriale care extind acest subiect pe WPSE, dacă efectuați o căutare veți găsi o mulțime de informații.

3 nov. 2012 08:23:20
Comentarii

Și cum rămâne cu fișierele atașate în câmpurile meta?

Gacek Gacek
12 iun. 2015 16:38:35

@Gacek ai reușit până la urmă cu atașarea fișierelor?

User User
31 oct. 2017 06:52:26

nu, chiar nu, să fiu sincer.

Gacek Gacek
31 oct. 2017 12:03:40
1
<?php 

if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "front_post") {

//stocam variabilele POST în variabile pentru utilizare ulterioară
//acum ar fi momentul potrivit pentru a face verificări/validări de bază
//pentru a ne asigura că datele pentru aceste valori au fost setate
$title     = $_POST['title'];
$content   = $_POST['content'];
$tags   = $_POST['tag'];
$custom_field = $_POST['custom_1']; 
$post_type = 'frontpost';


//matricea de argumente care vor fi inserate cu wp_insert_post
$new_post = array(
'post_title'    => $title,
'post_content'  => $content,
'tags_input'  => $tags,
'post_status'   => 'publish',           //stare: publicat
'post_category' => array('0',$_POST['cat']),          
'post_type'     => $post_type 
);

//inserăm postarea în baza de date prin transmiterea $new_post către wp_insert_post
//stocăm ID-ul postării în variabila $pid
//folosim $pid (post id) pentru a adăuga metadatele postării
 $pid=wp_insert_post($new_post);

//folosim $pid (post id) pentru a adăuga metadatele postării
add_post_meta($pid, 'cust_key', $custom_field);


}
?>

    <div class="front-form col-sm-6">
        <form method="post" name="front_end" action="" >
            <input type="text" name="title" placeholder="Titlu FrontPost" required />
             <textarea  name="content" placeholder="Conținut FrontPost" rows="5" ></textarea>
            <input type="text" name="tag" placeholder="Etichete FrontPost" />
            <input type="text" name="custom_1" placeholder="Conținut Câmp Personalizat" />


            <span><?php wp_dropdown_categories( 'tab_index=10&taxonomy=category&hide_empty=0' ); ?></span>
            <button type="submit">Trimite</button>
            <input type="hidden" name="action" value="front_post" />
        </form>
    </div>

încearcă asta, te va ajuta..! Aakib :)

4 ian. 2017 12:22:58
Comentarii

Te rog [editează] răspunsul tău și adaugă o explicație: de ce ar putea soluția respectivă rezolva problema?

fuxia fuxia
4 ian. 2017 13:06:42
0

inserare postare

    add_action('init', function() {
        if (isset($_POST['submit'])) {
            if (!is_user_logged_in()) {
                echo 'Trebuie să fii autentificat pentru a trimite o postare.';
                return;
            }
    
            $title = sanitize_text_field($_POST['name']);
            $description = sanitize_textarea_field($_POST['description']);
            $create_post = array(
                'post_status' => 'publish',
                'post_type' => 'user', // Asigură-te că tipul de postare 'user' este înregistrat
                'post_title' => $title,
                'post_content' => $description,
            );
    
            $post_id = wp_insert_post($create_post);
            if(isset($_FILES['fileToUpload']) && !empty($_FILES['fileToUpload']['name'])){
                require_once( ABSPATH . 'wp-admin/includes/image.php' );
                require_once( ABSPATH . 'wp-admin/includes/file.php' );
                require_once( ABSPATH . 'wp-admin/includes/media.php' );

                $attachement_id = media_handle_upload('fileToUpload',$post_id);
                if(is_wp_error($attachement_id)){
                    echo 'încărcare eșuată !!';
                }else{
                    set_post_thumbnail($post_id,$attachement_id);
                }
            }
            return  $post_id ? 'postare creată cu succes' : 'eroare la crearea postării';
            if ($post_id) {
                $state = sanitize_text_field($_POST['state']);
                $country = sanitize_text_field($_POST['country']);
                $pincode = sanitize_text_field($_POST['pincode']);
                $college = sanitize_text_field($_POST['college']);
    
                update_post_meta($post_id, 'state', $state);
                update_post_meta($post_id, 'country', $country);
                update_post_meta($post_id, 'pincode', $pincode);
                update_post_meta($post_id, 'college', $college);
    
                echo 'Postare creată cu succes!';
            } else {
                echo 'Nu s-a putut crea postarea.';
            }
        }
        
    });

aici partea HTML

<style cdn>
<div class="container">
    <form action="" method="post" enctype="multipart/form-data">
        <input type="hidden" name="post_id" value="<?php  echo $post_idd ?>"
        <div class="row mt-3">
            <div class="col-sm-6">
                <label>Nume</label>
                <input type="text" name="name" class="form-control" value="<?php echo isset($user_name) ? $user_name : ''; ?>">
            </div>
            <div class="col-sm-6">
            <label>Descriere</label>
                <input type ="text" name= "description" class="form-control" value="<?php echo isset($user_description) ? $user_description : ''; ?>">
            </div>
        </div>
        <div class="row mt-3">
            <div class="col-sm-12">
            <label> Selectează imagine pentru încărcare </label>
           <input type="file" name="fileToUpload" id="fileToUpload" class="form-control" value=" <?php echo isset($image) ? $image : ''; ?>">
            </div>
        </div>
        <div class="row mt-3">
            <div class="col-sm-4">
            <label>Județ</label>
                <input type ="text" name= "state" class="form-control" value="<?php  echo isset($state) ? $state : ''; ?>">
                </div>

                <div class="col-sm-4">
                    <label>Țară</label>
                <input type ="text" name= "country" class="form-control" value="<?php echo isset($country) ? $country : ''; ?>">
                </div>

                <div class="col-sm-4">
                <label>Cod poștal</label>
                <input type ="text" name= "pincode" class="form-control" value="<?php echo isset($pincode) ? $pincode : '' ?>">
            </div>
        </div>
        <div class="row mt-3">
            <div class="col-sm-12">
            <label>Nume colegiu </label>
                <input type ="text" name= "college" class="form-control" value="<?php echo isset($college) ? $college : ''; ?>">
            </div>
        </div>
        <?php if( isset($_GET['post_id']) && $_GET['post_id']!=""){?>
            <div class="row mb-5 mt-3">
            <div class="col-sm-12">
            <input type="submit" name="update" value="actualizează" class="btn btn-primary">
            </div>
            <?php } else {
            ?>
        </div>
        <div class="row mb-5 mt-3">
            <div class="col-sm-12">
            <input type="submit" name="submit" value="trimite" class="btn btn-primary">
            </div>
        </div>
        <?php  }
        ?>
    </form>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
5 dec. 2024 18:29:49