php - 使用 wp-ajax.php 处理查询字符串或类似内容
问题描述
我尝试在 Wordpress 中使用 ajax-php 调用函数,仅当查询字符串或类似字符串的值为 1 时。在管理区域中,我创建了一个新页面add_submenu_page()
,现在只使用一个按钮。单击该按钮时,我想做类似的事情:
- 将变量或查询字符串设置为 1。(如 www.myurl.com/?mystring=1)
- 检查其是否设置为 1。
- 如果设置为 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');
})
});
解决方案
在您的 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 中声明了您希望放置数据的位置。
可能还没有完全达到目标,所以试一试,让我知道还有什么需要实现的。
推荐阅读
- r - 仅将 readr::type_convert 映射到特定列
- ruby-on-rails - Travis CI Ruby 以 1 退出
- python - 麻烦安装jupyter
- python - SimpleItk - 使用 12 位写入 DICOM 图像(BitsAllocated=16,BitsStored=12)
- c - CS50x - 过滤器更多
- vue.js - 如何提高大型 Vue 组件的性能
- nginx - GKE Nginx 入口 - 设置主机导致 400 不需要 SSL 证书
- reactjs - React.js,超时 - 如何在几秒钟后隐藏 div
- c - 使用 x64 gdb 调试 x32 应用程序
- amazon-web-services - 我是否必须重新打包我的 docker 映像才能在基于 AWS Graviton(ARM) 的 EKS/ECS 上运行?