WordPress

javascript — Używanie formularza do przekazywania parametrów GET i odpowiedniego tworzenia tablicy postów

  • 25 maja, 2023
  • 4 min read
javascript — Używanie formularza do przekazywania parametrów GET i odpowiedniego tworzenia tablicy postów


Próbuję utworzyć tablicę postów na podstawie formularza na stronie administratora wydarzeń + dwie tablice. Kod działa dobrze, ale z jakiegoś powodu powoduje jakiś problem z zasobami, którego nie mogę rozgryźć:

<?php
// Render the custom meta box content
function render_events_custom_meta_box() {
    global $post_type;

    if ('event' == $post_type) {
        echo "<div class="updated">";
        echo '<p>';
        echo 'Vizsga időpontok létrehozása:';

        // Retrieve selected options
        $selected_language = isset($_POST['selected_language']) ? sanitize_text_field($_POST['selected_language']) : '';
        $selected_option = isset($_POST['selected_option']) ? sanitize_text_field($_POST['selected_option']) : '';
        $selected_date = isset($_POST['selected_date']) ? sanitize_text_field($_POST['selected_date']) : '';

        $insert_url = add_query_arg(
            array(
                'action' => 'insert_event_posts',
                'selected_language' => $selected_language,
                'selected_option' => $selected_option,
                'selected_date' => $selected_date,
            ),
            admin_url('admin-post.php')
        );

        echo "<form method='post' id='event-form' action='" . esc_url($insert_url) . "'>";
        
        echo "<button type="submit" class="button button-primary" id='submit-button' style="margin:0.25em 1em">Nyomj meg</button>";
        echo '</form>';

        // Retrieve selected options (removed from here)

        // Define arrays
        $languages = array('Magyar', 'Német', 'Olasz');
        $options = array('egynyelvű', 'kétnyelvű', 'Rendészeti egynyelvű');
        $levels = array('B1', 'B2', 'C1');
        $types = array('Papir', 'Számítógépes vizsgatermi', 'Sajátgépes vizsgatermi', 'Számítógépes Online');

        // Language dropdown
        echo '<label for="selected_language">Language:</label>';
        echo '<select id="selected-language" name="selected_language">';
        foreach ($languages as $language) {
            echo '<option value="' . $language . '"' . ($selected_language == $language ? 'selected="selected"' : '') . '>' . $language . '</option>';
        }
        echo '</select>';
        echo '<br>';

        // Option dropdown
        echo '<label for="selected_option">Option:</label>';
        echo '<select name="selected_option" id="selected-option">';
        foreach ($options as $option) {
            echo '<option value="' . $option . '"' . selected($selected_option, $option, false) . '>' . $option . '</option>';
        }
        echo '</select>';
        echo '<br>';

        // Date picker
        echo '<label for="selected_date">Date:</label>';
        echo '<input type="date" name="selected_date" id="selected-date" value="' . $selected_date . '">';
        echo '<br>';

        echo '</div>';
        ?>
<script>
document.addEventListener('DOMContentLoaded', function() {
    var dropdowns = ['selected-language', 'selected-option', 'selected-date'];

    dropdowns.forEach(function(dropdownId) {
        var dropdown = document.getElementById(dropdownId);

        dropdown.addEventListener('change', function() {
            var selectedLanguage = document.getElementById('selected-language').value;
            var selectedOption = document.getElementById('selected-option').value;
            var selectedDate = document.getElementById('selected-date').value;

            console.log(selectedLanguage);

            var insertUrl="/wp-admin/edit.php?post_type=event&action=insert_event_posts" +
                '&selected_language=" + selectedLanguage +
                "&selected_option=' + selectedOption +
                '&selected_date=" + selectedDate;

            console.log(insertUrl);


            document.getElementById("event-form').action = insertUrl;
        });
    });
});
</script>
<?php
    }
}
add_action('admin_notices', 'render_events_custom_meta_box');


// Handle form submission and create new posts
function insert_event_posts() {
    // Retrieve selected options
    $selected_language = isset($_POST['selected_language']) ? sanitize_text_field($_POST['selected_language']) : '';
    $selected_option = isset($_POST['selected_option']) ? sanitize_text_field($_POST['selected_option']) : '';
    $selected_date = isset($_POST['selected_date']) ? sanitize_text_field($_POST['selected_date']) : '';

    // Define arrays
    $levels = array('B1', 'B2', 'C1');
    $types = array('Papir', 'Számítógépes vizsgatermi', 'Sajátgépes vizsgatermi', 'Számítógépes Online');

    // Create new posts for all variations
    foreach ($levels as $level) {
        foreach ($types as $type) {
            $post_title = $selected_language . ' ' . $selected_option . ' ' . $level . ' ' . $type;

            $post_data = array(
                'post_title' => $post_title,
                'post_type' => 'event',
                'post_status' => 'publish',
            );

            // Insert new post
            wp_insert_post($post_data);
        }
    }

    // Redirect to the page URL where the function was executed
    wp_safe_redirect(wp_get_referer());
    exit;
}
add_action('admin_post_insert_event_posts', 'insert_event_posts'); 

?>

Jeśli skomentuję skrypt, funkcje zostaną uruchomione, a posty zostaną utworzone, ale parametry języka i opcji zostaną pominięte w tytułach.

Warto przeczytać!  woocommerce offtopic – Weryfikacja niestandardowego Captcha w przypadku problemu z formularzem rejestracyjnym

Jeśli zostawię skrypt, pojawia się błąd:

Link, który kliknąłeś, wygasł. Proszę spróbuj ponownie.

Oto przykład końcowego adresu URL: /wp-admin/edit.php?post_type=event&action=insert_event_posts&selected_language=Német&selected_option=kétnyelvű&selected_date=2023-05-28

Może ktoś ma jakiś pomysł co może być przyczyną przeciążenia?

Dzięki!


Źródło