Pregunta sobre Developing with WordPress de Wordpress:

Funci贸n de llamada $ .ajax 400 Bad Missing

Un usuario pregunt贸 馃憞

Toda la tarde,

Le铆 el siguiente problema en foros y en otros lugares en l铆nea, pero nada hasta ahora parece resolver el problema en curso.

Actualmente estoy creando un plugin personalizado para expandir el repositorio de im谩genes de plguin que ya no se mantiene para un cliente. Quer铆a usar ajax para dise帽ar una funci贸n que est茅 dise帽ada din谩micamente para crear, actualizar y eliminar t茅rminos personalizados, agregar un meta t茅rmino y publicar en el acceso directo requerido sin que mi cliente tenga que copiar y cambiar el panel de administraci贸n.

Si utilizo la API para hacer esta tarea, tambi茅n me toma un tiempo procesar el servidor y no funciona el 100% del tiempo.

Mensaje de error:
POST https://{client-url}/wp-admin/admin-ajax.php 400 (Bad Request)

Plugin de inicio:


require '_inc/ims_ca_functions.php';

add_action('admin_enqueue_scripts', 'admin_scripts');

function admin_scripts(){

    wp_enqueue_script( 
        'ims_ca_core', 
        plugin_dir_url( __FILE__ ) . '_assets/ims_ca_core.js', 
        array(), 
        '1.0.0', 
        false
    );
    wp_localize_script( 
        'ims_ca_core', 
        'ims_ca_rest', 
        array(
            'rest_url' => get_site_url().'/wp-json',
            'nonce' => wp_create_nonce( 'wp_rest' ),
            'ajaxurl' => admin_url('admin-ajax.php')
    ) );  
}

add_action('wp_ajax_ims_ca_test-ajax', 'imsCAAjaxRequest');
add_action('wp_ajax_nopriv_ims_ca_add_to_term', 'imsCAAjaxRequest');

Funci贸n de llamada:


function imsCAAjaxRequest(){

    // Ajax Method Request
    $mode           = $_POST['mode']; //POST, UPDATE, DELETE, GET

    // IMS_ALBUM Detail Request
    $taxID          = 'ims_album';
    $termID         = $_POST['term_ID'];
    $termTitle      = $_POST['term_Title'];
    $termSlug       = Optimiser::uglify($termTitle);

    // Post Detail Request
    $catID          = 59;
    $postID         = $_POST['post_ID'];
    $postTitle      = $termTitle;
    $postSlug       = $termSlug;
    $postContent    = '[image-store album='.$termID.' all=true]';
    $postStatus     = 'Publish';
    $postType       = 'post';
    
    switch ($mode){
        case 'POST':

            //First Insert New Term
            wp_insert_term( 
                $termTitle,
                $taxID,
                array(
                    'description'   => '',
                    'slug'          => $termSlug,
                    'parent'        => 0     
                )
            );

            //Second Insert New Post
            $postARGS = array(
                'post_title'        => $postTitle,
                'post_type'         => $postType,
                'post_status'       => $postStatus,
                'comment_status'    => 'closed',
                'post_category'     => $catID,
                'post_content'      => $postContent
            );
            wp_insert_post( $postARGS );

            //Third Insert Term Meta
            $newTerm = get_term_by( 
                'slug',
                $termSlug,
                $taxID
            );

            $newPostSlug = get_post_field( 'post_name', get_post() );

            if ($newPostSlug == $newTerm):
                $newPID = $newPostSlug->id;
            endif;

            add_term_meta(
                $newTerm->term_id,
                'ims_ca_term-pid',
                $newPID,
                true
            );

            // Finally Create and Encode JSON Array
            $response = [
                'Message'   => 'Successfully added new album: '.$termTitle,
                'Album ID'  => $newTerm->term_id,
                'Post ID'   => $newPID
            ];

            wp_reset_postdata();

            return json_encode($response);

            break;
            
        case 'UPDATE':

            //First Update Term
            wp_update_term( 
                $termID,
                $taxID,
                array(
                    'name'          => $termName,
                    'slug'          => $termSlug   
                )
            );

            //First Update Post
            $postARGS = array(
                'ID'            => $postID,
                'post_title'    => $postTitle,
                'post_slug'     => $postSlug
            );

            wp_update_post( $postARGS );

            break;

    }
    wp_die();
}

El jQuery:


$(".testAJAX").on('click', function(e){
        jQuery.ajax({
            url : ims_ca_rest.ajaxurl,
            method: "POST",
            data:{
                action: 'imsCAAjaxRequest',
                mode: 'POST',
                term_Title: 'Test Term Alpha'
            },
            beforeSend: function ( xhr ) {
                xhr.setRequestHeader( 'X-WP-Nonce', ims_ca_rest.nonce );
            },
            success : function( response ) {
                console.log(response);
            }
        });
        e.preventDefault();
    })

Estoy perdiendo ahora y agradecemos cualquier ayuda.

Saludos, Stephen

Este tema fue modificado hace 1 a帽o, 10 meses por.

(@ alegremente)

Hace 1 a帽o, 10 meses

Parece que est谩s mezclando REST y AJAX. Para AJAX, el valor de su actividad debe coincidir con el nombre de su actividad, no con el nombre de su funci贸n. Tu codigo add_action('wp_ajax_ims_ca_test-ajax', 'imsCAAjaxRequest'), usar铆as datos javascript con action : 'ims_ca_test-ajax'. Eso es para las aplicaciones administrativas.

Tu codigo add_action('wp_ajax_nopriv_ims_ca_add_to_term', 'imsCAAjaxRequest') usar action : 'ims_ca_add_to_term' y est谩 disponible para los usuarios que no han iniciado sesi贸n.

El nonce debe estar en el mismo lugar donde se define la acci贸n en javascript. Es para que REST se coloque en el encabezado de la solicitud. Y debe verificarlo en el c贸digo PHP y santificar todas las variables $ _POST que est谩 usando como est谩n.

Tambi茅n debe verificar la capacidad, para no recibir basura aleatoria de personas que no son usuarios que se agregan a la base de datos.

Lanzador de hilos

(@ sasherwood93)

Hace 1 a帽o, 10 meses

Gracias @ alegremente por tu respuesta.

He modificado mi ‘acci贸n’, pero en lugar del error 400, ahora recibo el error 500.

Esteban

(@ alegremente)

Hace 1 a帽o, 10 meses

Aseg煤rese de activar el modo de depuraci贸n y el registro de depuraci贸n. https://codex.wordpress.org/Debugging_in_WordPress https://codex.wordpress.org/Editing_wp-config.php#Debug Luego puede ver el registro de errores del servidor.

Lanzador de hilos

(@ sasherwood93)

Hace 1 a帽o, 10 meses

Hola,

He revisado el c贸digo y ahora la aplicaci贸n Ajax funciona, pero ahora esto probablemente ayude, la imagen devuelve un error 500 despu茅s de publicar una nueva galer铆a y restaura la URL a posts.php.

He desactivado mi plugin personalizado que restaura la publicaci贸n a la normalidad.

Alguna idea si esto podr铆a estar relacionado con mi script y la funci贸n Ajax.

驴Solucion贸 tu problema??

0 / 0

Deja una respuesta 0

Tu direcci贸n de correo electr贸nico no ser谩 publicada.