Wordpress插件ajax返回0

时间:2015-06-20 03:30:48

标签: javascript php jquery ajax wordpress

我正在尝试将AJAX数据发送到我的 wordpress 表,但我从PHP获得的只是0。它在管理方面。任何人都可以帮助我吗?

此外,所有代码都在我的插件文件夹中的plugin-admin.php文件中。

<?php
    if ( ! defined( 'ABSPATH' ) || ! current_user_can( 'manage_options' ) ) exit;

    global $wpdb;
    global $wp_version;


  $results = $wpdb -> get_results(
              "
                SELECT ID, post_title, post_excerpt
                FROM $wpdb->posts
                WHERE post_type =  'post' and post_status NOT LIKE 'auto-draft'
                AND post_title NOT LIKE 'Auto Draft'
                AND post_status = 'publish'
                ORDER BY post_title
              "
            );

  add_action( 'wp_ajax_featured_submit_action', 'featured_submit_callback' );

  function featured_submit_callback(){
    echo "hi";

    wp_die();
  }



?>

<div class="wrap">
  <h2>Select Posts</h2>
    <select id="selected-posts" multiple="multiple">
      <?php
        foreach ( $results as $result ){
          ?><option value="<?php echo $result->ID; ?>"> <?php echo $result->post_title; ?> </option> <?php
        }
      ?>
    </select>
    <br>
    <input type="submit" id="sposts-submit"></input>


</div>

<script>
  jQuery(document).ready(function($) {

    var spostsarray = new Array();

    //Click button
    $("#sposts-submit").click(function(){

      var spostsarray = new Array();

      $("#selected-posts").each(function(item){
        spostsarray.push( $(this).val() );
      });
      console.log(spostsarray);

      var data = {
        "action": "featured_submit_action",
        "posts": spostsarray
      }

      $.ajax({
        url: "<?php echo admin_url('admin-ajax.php'); ?>",
        type: "POST",
        action: "featured_submit_action",
        data: {"posts": spostsarray},
        success: function(data){
          console.log(data);
        }
      });

    });


  });
</script>

我已经将它浓缩了一点,但一般的想法是我可以抓住所有最近的帖子,用户可以选择他们想要的功能,将其发送到PHP方法并使用它编辑表格。

问题在于我的AJAX回调我只返回0而不是从javascript发送的数据。

解决: 在Rohil_PHPBeginner的帮助下,我发现了它。它不起作用的原因是我从菜单页面执行代码,此时添加一个钩子为时已晚。这是我用来解决它的页面:

AJAX in WP Plugin returns 0 always

2 个答案:

答案 0 :(得分:1)

下面的代码对我来说非常合适:

<?php
        global $wpdb;
        global $wp_version;


      $results = $wpdb -> get_results(
                  "
                    SELECT ID, post_title, post_excerpt
                    FROM $wpdb->posts
                    WHERE post_type =  'post' and post_status NOT LIKE 'auto-draft'
                    AND post_title NOT LIKE 'Auto Draft'
                    AND post_status = 'publish'
                    ORDER BY post_title
                  "
                );
    ?>

    <div class="wrap">
      <h2>Select Posts</h2>
        <select id="selected-posts" multiple="multiple">
          <?php
            foreach ( $results as $result ){
              ?><option value="<?php echo $result->ID; ?>"> <?php echo $result->post_title; ?> </option> <?php
            }
          ?>
        </select>
        <br>
        <input type="submit" id="sposts-submit"></input>
    </div>

<?php
add_action( 'wp_ajax_featured_submit_action', 'featured_submit_callback' );
add_action( 'wp_ajax_nopriv_featured_submit_action', 'featured_submit_callback' );

function featured_submit_callback(){
   echo "hi";
   wp_die();
}
?>

    <script>
      jQuery(document).ready(function($) {
        //Click button
        $("#sposts-submit").click(function(){

          var spostsarray = new Array();

          $("#selected-posts").each(function(item){
            spostsarray.push( $(this).val() );
          });
          console.log(spostsarray);

          var data = {
            "action": "featured_submit_action",
            "posts": spostsarray
          }

          $.ajax({
            url: ajaxurl,
            type: "POST",
            data: data,
            success: function(data){
              console.log(data);
            }
          });

        });
      });
    </script>

您不需要以这种方式传递AJAX网址,因为当我使用您的代码时,它会向我展示PHP。 WordPress为AJAX提供了一个默认URL,因此您可以使用它(我在下面的代码中使用的ajaxurl)。

除此之外您还没有为no-privilege用户添加代码(如果它仅用于特权用户,那么就可以了,否则您需要为此添加代码)。

答案 1 :(得分:1)

当ajax调用没有找到有效的回调函数时,WordPress返回0(尽管0可以从许多其他东西返回)。

WordPress会在用户登录时查找与wp_ajax_{callback}匹配的回调,并在用户注销时查找wp_ajax_nopriv_{callback}。 {callback}填充了&#34; action&#34;的POST&#39; d值。隐藏的输入。请注意,您未将action传递给AJAX调用。你应该改变: data: {"posts": spostsarray},data: data

由于你不会在没有传递操作的情况下匹配回调函数,因此WordPress返回0