Aggiungere elementi di tipo post personalizzato dal frontend

3 nov 2012, 06:41:47
Visualizzazioni: 32.2K
Voti: 5

Sto cercando di capire come fare in modo che il mio sito WordPress possa aggiungere elementi di tipo portfolio dal frontend. Plugin come WP-User-Frontend permettono la pubblicazione dal frontend ma funzionano solo con i post del blog.

Ci sono modi o plugin simili a wp-user-frontend ma che permettano di aggiungere elementi di tipo post personalizzato?

0
Tutte le risposte alla domanda 3
3
12

Se sei disposto a pagare per questo, il plugin Gravity Forms ti permette di creare moduli che si mappano ai tuoi Custom Post Types (anche i tipi di post e pagine regolari) così come ai tuoi campi personalizzati.

Per coloro che non lo sono e che sono disposti a rimboccarsi le maniche, puoi creare un modulo front-end che invia dati a qualsiasi tipo di post tu scelga in modo abbastanza semplice.

Ecco un esempio base:

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

// memorizziamo le variabili del post in variabili per un uso successivo
// ora sarebbe un buon momento per eseguire alcuni controlli di errore/validazione di base
// per assicurarsi che i dati per questi valori siano stati impostati
$title     = $_POST['title'];
$content   = $_POST['content'];
$post_type = 'my_custom_post';
$custom_field_1 = $_POST['custom_1'];
$custom_field_2 = $_POST['custom_2'];    

// l'array di argomenti da inserire con wp_insert_post
$new_post = array(
'post_title'    => $title,
'post_content'  => $content,
'post_status'   => 'publish',          
'post_type'     => $post_type 
);

// inseriamo il post nel database passando $new_post a wp_insert_post
// memorizziamo l'ID del post in una variabile $pid
$pid = wp_insert_post($new_post);

// ora usiamo $pid (post id) per aggiungere i nostri metadati del post
add_post_meta($pid, 'meta_key', $custom_field_1, true);
add_post_meta($pid, 'meta_key', $custom_field_2, true);

}

Il tuo modulo HTML avrebbe un aspetto simile a questo:

<form method="post" name="front_end" action="" >
<input type="text" name="title" value="Titolo del mio post" />
<input type="text" name="content" value="Contenuto del mio post" />
<input type="text" name="custom_1" value="Contenuto del campo personalizzato 1" />
<input type="text" name="custom_2" value="Contenuto del campo personalizzato 2" />
<button type="button">Invia</button>
<input type="hidden" name="action" value="my_post_type" />
</form>

Puoi inserire tutto questo nel file template del tuo tema. Normalmente, farei un passo avanti e eseguirei la logica di elaborazione (PHP) da una funzione all'interno del mio functions.php agganciata a un'azione, tuttavia funzionerà anche da un file del tema.

Questo è solo un esempio base e manca di un controllo degli errori e una validazione seria. Tuttavia, ti fornisce il framework essenziale per ciò che ti serve per inviare dal front-end ai tuoi tipi di post nel back-end.

Ci sono anche numerosi tutorial che approfondiscono l'argomento su WPSE se esegui una ricerca troverai una ricchezza di informazioni.

3 nov 2012 08:23:20
Commenti

E per quanto riguarda i file allegati nei meta campi?

Gacek Gacek
12 giu 2015 16:38:35

@Gacek sei riuscito a risolvere con gli allegati dei file?

User User
31 ott 2017 06:52:26

no, non proprio, a dire la verità.

Gacek Gacek
31 ott 2017 12:03:40
1
<?php 

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

// memorizziamo le variabili POST in variabili per uso successivo
// questo sarebbe un buon momento per eseguire alcuni controlli di errore/validazione di base
// per assicurarci che i dati per questi valori siano stati impostati
$title     = $_POST['title'];
$content   = $_POST['content'];
$tags   = $_POST['tag'];
$custom_field = $_POST['custom_1']; 
$post_type = 'frontpost';


// l'array di argomenti da inserire con wp_insert_post
$new_post = array(
'post_title'    => $title,
'post_content'  => $content,
'tags_input'  => $tags,
'post_status'   => 'publish',
'post_category' => array('0',$_POST['cat']),          
'post_type'     => $post_type 
);

// inseriamo il post nel database passando $new_post a wp_insert_post
// memorizziamo l'ID del post in una variabile $pid
// ora usiamo $pid (post id) per aggiungere i metadati del post
 $pid=wp_insert_post($new_post);

// ora usiamo $pid (post id) per aggiungere i metadati del post
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="Titolo FrontPost" required />
             <textarea  name="content" placeholder="Contenuto FrontPost" rows="5" ></textarea>
            <input type="text" name="tag" placeholder="Tag FrontPost" />
            <input type="text" name="custom_1" placeholder="Contenuto Campo Personalizzato" />


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

prova questo, ti aiuterà..! Aakib :)

4 gen 2017 12:22:58
Commenti

Per favore [modifica] la tua risposta e aggiungi una spiegazione: perché potrebbe risolvere il problema?

fuxia fuxia
4 gen 2017 13:06:42
0

inserisci post

    add_action('init', function() {
        if (isset($_POST['submit'])) {
            if (!is_user_logged_in()) {
                echo 'Devi essere loggato per inviare un post.';
                return;
            }
    
            $title = sanitize_text_field($_POST['name']);
            $description = sanitize_textarea_field($_POST['description']);
            $create_post = array(
                'post_status' => 'publish',
                'post_type' => 'user', // Assicurati che il post type 'user' sia registrato
                '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 'upload fallito !!';
                }else{
                    set_post_thumbnail($post_id,$attachement_id);
                }
            }
            return  $post_id ? 'post creato con successo' : 'errore nella creazione del post';
            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 'Post creato con successo!';
            } else {
                echo 'Creazione del post fallita.';
            }
        }
        
    });

ecco la parte 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>Nome</label>
                <input type="text" name="name" class="form-control" value="<?php echo isset($user_name) ? $user_name : ''; ?>">
            </div>
            <div class="col-sm-6">
            <label>Descrizione</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> Seleziona immagine da caricare </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>Stato</label>
                <input type ="text" name= "state" class="form-control" value="<?php  echo isset($state) ? $state : ''; ?>">
                </div>

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

                <div class="col-sm-4">
                <label>CAP</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>Nome College</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="aggiorna" 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="invia" 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 dic 2024 18:29:49