首页 > 解决方案 > 使用 wp-ajax.php 处理查询字符串或类似内容

问题描述

我尝试在 Wordpress 中使用 ajax-php 调用函数,仅当查询字符串或类似字符串的值为 1 时。在管理区域中,我创建了一个新页面add_submenu_page(),现在只使用一个按钮。单击该按钮时,我想做类似的事情:

  1. 将变量或查询字符串设置为 1。(如 www.myurl.com/?mystring=1)
  2. 检查其是否设置为 1。
  3. 如果设置为 1,则调用一个函数。

我该怎么做?感谢大家的帮助!

目前,我的代码如下所示:

函数.php

add_action('wp_ajax_custom_action', array($this, 'mediabank_admin_import_posts'));
add_action('wp_ajax_nopriv_custom_action', array($this, 'mediabank_admin_import_posts'));

function mediabank_admin_import_posts() {
  if(!isset($_POST['import_posts_nonce']) || !wp_verify_nonce($_POST['import_posts_nonce'], 'mediabank_admin_import_posts_nonce')) {
    exit('Not valid form');
  }

  //process/call function
}

html(出现在 wp-admin 的页面上)

<div class="wrap">
  <form id="import-posts" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post">
  <input type="hidden" name="action" value="mediabank_admin_import_posts">    
  <?php wp_nonce_field('mediabank_admin_import_posts_nonce', 'import_posts_nonce'); ?>
  <button id="import_posts" class="button button-primary button-large">Submit</button>
</form>

JS

$(function() {
  $('#import_posts').on('submit', function(e) {
   e.preventDefault();

   var form = $(this);

   $.post(form.attr('action'), form.serialize(), function(data) {
     alert('data ' + data);
   }, 'json');
 })
});

标签: phpwordpress

解决方案


在您的 JS 中,您可以像这样获取表单数据:

JS:

$('#import-posts').on("change", function(e) {
  e.preventDefault();
  var formData = $('.filters-form').serialize();
  aJaxFilter(formData);
});

function aJaxFilter(formData) {
  $.ajax({
    url: js_variables.ajaxURL,
    type:'GET',
    data: {
      'formData' : formData,
      'action' : 'yourFunctionName'
    },
    success:function(data){
      $('.YourContainer').html(data);
    }
  });
}

在您的functions.php 中,您需要将JS 变量排入队列,如下所示:

函数.php:

function scripts() {
  wp_localize_script ('scripts', 'js_variables', array ('js_home_url' => 
  home_url(), 'ajaxURL' => admin_url( 'admin-ajax.php' ), ''));
}
add_action( 'wp_enqueue_scripts', 'scripts' );

创建一个名为 ajax-function.php 的新名称。在其中,输入以下内容:

add_action('wp_ajax_yourFunctionName', 'yourFunctionName');
add_action('wp_ajax_nopriv_yourFunctionName', 'yourFunctionName');

function yourFunctionName() {
  // your code in here
}

这应该能够提交您的表单。在提交时,它应该使用表单数据发出 AJAX 请求。你想从回调函数中得到什么,你需要把你的函数名()放在里面。然后,您需要确保在 AjaxFilter 中声明了您希望放置数据的位置。

可能还没有完全达到目标,所以试一试,让我知道还有什么需要实现的。


推荐阅读