为什么它是一个坏的请求 AJAX WordPress?

a64a0gku  于 2022-12-29  发布在  WordPress
关注(0)|答案(1)|浏览(174)

我想从前端发布wordpress的帖子,但我得到错误400坏的请求。我已经添加了我的php文件中的两个挂钩以及。请让我知道我错在哪里。
PHP代码有两个功能。1用于在前端添加表单和处理ajax请求的 AJAX 处理程序。如果我使用核心PHP,我没有错误,但我想使用ajax只是为了避免重载。在这里我卡住了,需要Maven的帮助。我将感谢任何帮助,提示或链接到有用的资源。
AJAX 代码:

jQuery(document).ready(function($) {
    $('#submit').on('click', function(e){
        e.preventDefault();
        let title = $('#title').val();
        let content = $('#content').val();
        var formData = new FormData();
        formData.append('image', document.getElementById('image-input').files[0]);
        formData.append('var1', title);
        formData.append('var2', content);

        $.ajax({
            url: 'http://localhost/wpdemo/wp-admin/admin-ajax.php',
            type: 'POST',
            data: formData,
            processData: false, //add this
            contentType: false, //and this
            success: function(response) {
                console.log(response);
            }
          });
    })
});

PHP代码:

<?php
/*
Plugin Name:  Notification Plugin Beta Version
Plugin URI:   https://www.amirsandila.com/ 
Description:  My first ever plugin n history of technology. You will love this plugin. 
Version:      1.0
Author:       Amir Sandila  
Author URI:   https://www.amirsandila.com
License:      GPL2
License URI:  https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  amirsandila
Domain Path:  /languages
*/

define("version", strtotime(date("Ymd")));

function my_theme_enqueue_scripts() {
  wp_enqueue_script( 'custom-jquery', 'https://code.jquery.com/jquery-3.5.1.min.js', array(), version, true );
  wp_enqueue_script('ajax-script', '/wp-content/plugins/wp-plugin-demo/js/script.js',array(), version, true );
  wp_localize_script( 'ajax-script', 'my_ajax_object', array( 'ajax_url' => admin_url( '/admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_scripts' );

function my_ajax_handler() {
  if (isset($_FILES['image'])){

    $post_title = $_POST['var1'];
    $image = $_FILES['image'];
    $post_content = $_POST['var2'];
  
    $new_post = array(
      'post_title' => $post_title,
      'post_content' => $post_content,
      'post_status' => 'publish',
      'post_name' => 'pending',
    );
  
    $pid = wp_insert_post($new_post);
    add_post_meta($pid, 'meta_key', true);
  
    if (!function_exists('wp_generate_attachment_metadata'))
    {
      require_once(ABSPATH . "wp-admin" . '/includes/image.php');
      require_once(ABSPATH . "wp-admin" . '/includes/file.php');
      require_once(ABSPATH . "wp-admin" . '/includes/media.php');
    }
    if ($_FILES)
    {
      foreach ($_FILES as $file => $array)
      {
        if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK)
        {
          return "upload error : " . $_FILES[$file]['error'];
        }
        $attach_id = media_handle_upload( $file, $pid );
      }
    }
    if ($attach_id > 0)
    {
      //and if you want to set that image as Post then use:
      update_post_meta($pid, '_thumbnail_id', $attach_id);
    }
  }
  }
  add_action("wp_ajax_my_ajax_handler", "my_ajax_handler");
  add_action("wp_ajax_nopriv_my_ajax_handler", "my_ajax_handler");

function form_shortcode_func() {
    $output = '<style>
                .form-container {
                    width: 70%;
                    margin: 0 auto;
                    border: 1px solid #ccc;
                    padding: 20px;
                }
                .form-container input[type="text"], .form-container textarea {
                    width: 100%;
                    border: 1px solid #ccc;
                    padding: 10px;
                    margin-bottom: 10px;
                }
                .form-container input[type="submit"] {
                    background-color: #333;
                    color: #fff;
                    border: 0;
                    padding: 10px 20px;
                    cursor: pointer;
                }
                </style>
                <h2> Sumit Your Article! </h2>
                <div class="form-container">
                <form method="POST" enctype="multipart/form-data">
                    <input type="text" id="title" name="title" placeholder="Post Title">
                    <textarea name="message" id="content" rows="20" cols="30" placeholder="Post Body"></textarea>
                    <input type="file" id="image-input" name="image">
                    <button id="submit"> submit </button>
                </form>
                </div>';
    return $output;
}

add_shortcode('form', 'form_shortcode_func');

?>
r7xajy2e

r7xajy2e1#

你丢失了action参数,所以wordpress不知道你想要哪个函数。
在您js:

var formData = {
    'action' : 'my_ajax_handler',
    image: document.getElementById('image-input').files[0],
    var1: title,
    var2: content
};

$.ajax({
  //Do your ajax
});

你真的应该定义你的 AJAX 网址不同:

$.ajax({
    url: my_ajax_object.ajax_url,
      //Do your ajax
 });

相关问题