WordPress

plugins – Przesyłanie formularza do admin-post.php WordPress

  • 20 marca, 2023
  • 3 min read
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.

Warto przeczytać!  pętla — Wordpress z niestandardowym zapytaniem woocommerce

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?


Źródło