plugins – Przesyłanie formularza do admin-post.php WordPress
Próbowałem uruchomić podstawową wtyczkę i postępowałem zgodnie z tym, co wydaje się być przepływem, aby uzyskać formularz do opublikowania w admin-post.php.
Jednak wydaje mi się, że biały ekran śmierci pojawia się tylko po przesłaniu formularza.
To jest mój główny plik wtyczki
<?php
/**
* Plugin Name: Test form
*/
function wp_meetings_menu(){
add_menu_page('Meetings', 'Meetings', 'manage_options', 'wp_meetings', 'wp_meetings_form');
}
add_action('admin_menu', 'wp_meetings_menu');
function wp_meetings_form() {
?>
<div class="wrap">
<h2>Meetings</h2>
<form method="post" action="<?php echo admin_url('admin-post.php'); ?>" enctype="multipart/form-data">
<label>Date and Time:</label>
<input type="datetime-local" name="datetime"><br><br>
<label>Drop Down 1:</label>
<select name="dropdown1">
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
<option value="option3">Option 3</option>
</select><br><br>
<label>Drop Down 2:</label>
<select name="dropdown2">
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
<option value="option3">Option 3</option>
</select><br><br>
<label>Drop Down 3:</label>
<select name="dropdown3">
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
<option value="option3">Option 3</option>
</select><br><br>
<label>PDF File:</label>
<input type="file" name="pdf_file"><br><br>
<input type="submit" name="submit" value="Submit">
<input type="hidden" name="action" value="wp_meetings_submit" />
</form>
</div>
<?php
}
?>
i to jest kod w pliku functions.php, który ma obsługiwać przesyłanie do admin-post.php
// Handle form submission and database insertion
add_action( 'admin_post_wp_meetings_submit', 'wp_meetings_submit' );
add_action( 'admin_post_nopriv_wp_meetings_submit', 'wp_meetings_submit' );
function wp_meetings_submit(){
global $wpdb;
if(isset($_POST['submit'])){
$datetime = $_POST['datetime'];
$dropdown1 = $_POST['dropdown1'];
$dropdown2 = $_POST['dropdown2'];
$dropdown3 = $_POST['dropdown3'];
$pdf_file = $_FILES['pdf_file']['name'];
$upload_dir = wp_upload_dir();
$pdf_path = $upload_dir['path'] . " . $pdf_file;
move_uploaded_file($_FILES['pdf_file']['tmp_name'], $pdf_path);
$wpdb->insert(
'wp_meetings',
array(
'datetime' => $datetime,
'dropdown1' => $dropdown1,
'dropdown2' => $dropdown2,
'dropdown3' => $dropdown3,
'pdf_file' => $pdf_file
),
array(
'%s',
'%s',
'%s',
'%s',
'%s'
)
);
}
}
Wszystko, co otrzymuję podczas publikowania formularza, to biały ekran śmierci z pustym polem komunikatu o błędzie.
Skonfigurowałem WP_DEBUG tak, aby był prawdziwy, ale podczas ponownego tworzenia błędu nie jest generowany żaden dziennik debugowania.
Zastanawiałem się, jaki jest prawidłowy i pełny sposób na osiągnięcie tego?