Adăugare elemente de tip custom post din frontend
Î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?

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.

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

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>
