it-swarm.com.de

POST von jQuery nach PHP

Ich habe ein Formular, das Feldwerte an jQuery übergibt, das die Felder überprüft und die Variablen erstellt, die in data: {} im folgenden Snippet gesendet werden.

$.ajax({
    type: "POST",
    url: "<?php bloginfo('stylesheet_directory'); ?>/process.php",
    dataType: "json",
    data: {
        "title":title,
        "goals":goals,
        "progress":progress,
        "categories":categories,
        "tags":tags,
        "video":video,
        "audio":audio,
    },
    success: function() {
        //get permalink for post from php and go to it
    }
});

process.php empfängt keine Daten oder sendet keine Daten.

Ich bin mir nicht sicher warum.

Unten ist meine process.php Datei:

<?php

    $user_submitted_title = sanitize_text_field($_POST['user_submitted_title']);
    $user_submitted_progress = $_POST['user_submitted_progress'];
    $user_submitted_goals = $_POST['user_submitted_goals'];
    $user_submitted_categories = $_POST['user_submitted_categories'];
    $user_submitted_tags = sanitize_text_field($_POST['user_submitted_tags']);
    $user_submitted_video = sanitize_text_field($_POST['user_submitted_video']);
    $user_submitted_audio = sanitize_text_field($_POST['user_submitted_audio']);

    $user_post = array(
        'comment_status' => 'open',
        'post_author'    => $user_ID,
        'post_category'  => array($user_submitted_categories),
        'post_content'   => '<h2>Project Progress</h2>' . $user_submitted_progress . '<h2>Project Goals</h2>' . $user_submitted_goals,
        'post_status'    => 'publish',
        'post_title'     => $user_submitted_title,
        'post_type'      => 'post',
        'tags_input'     => $user_submitted_tags
    );

    $user_post_id = wp_insert_post($user_post);
    add_post_meta($user_post_id, 'wpcf-video', $user_submitted_video);
    add_post_meta($user_post_id, 'wpcf-audio', $user_submitted_audio);

    $user_post_redirect = get_permalink($user_post_id);

?>

Ich muss herausfinden, warum nichts veröffentlicht wird, wenn ich das Formular verwende, und wie ich $user_post_redirect zurück an jQuery sende, damit ich zu ihm umleiten kann.

Wie kann ich das erreichen?

1
Nick Passaro

Wenn Sie Ihre process.php-Datei direkt laden, befindet sie sich nicht im Kontext der WordPress-Umgebung, sodass keine WordPress-Funktionen verfügbar sind. WordPress hat eine native AJAX-API , die für diese Art von Dingen verwendet werden sollte.

Stellen Sie zuerst Ihre Javascript-Datei in die Warteschlange und geben Sie dann wp_localize_script ein, um den Speicherort zu übergeben von admin-ajax.php, der die Anfragen bearbeitet:

function wpa_scripts() {
    wp_enqueue_script(
        'wpa_script',
        get_template_directory_uri() . '/js/script.js',
        array('jquery'),
        null,
        true
    );
    $script_data = array(
        'admin_ajax' => admin_url( 'admin-ajax.php' )
    );
    wp_localize_script(
        'wpa_script',
        'wpa_data',
        $script_data
    );
}
add_action( 'wp_enqueue_scripts', 'wpa_scripts' );

Fügen Sie als Nächstes eine action zu Ihren Ajax-Daten hinzu, die der Funktion zugeordnet wird, die zur Verarbeitung der Anforderung verknüpft ist:

$.ajax({
    type: "POST",
    url: wpa_data.admin_ajax,
    dataType: "json",
    data: {
        "action":"some_action",
    },
    success: function() {
        //get permalink for post from php and go to it
    }
});

Zuletzt fügen Sie die Aktion in PHP hinzu und binden sie in die Funktion ein, die sie empfängt und verarbeitet. Verschieben Sie dann den Inhalt von process.php in diese Funktion

add_action( 'wp_ajax_some_action', 'your_process_function' );
add_action( 'wp_ajax_nopriv_some_action', 'your_process_function' );
3
Milo