我正在尝试将数据从ajax调用传递到Wordpress的特定页面 以下是我正在使用的代码:
//----------Annotation --------------
iTextSharp.text.Rectangle rect_txt = rect;
rect_txt.Bottom = rect_txt.Top - 2;
rect_txt.Top = rect_txt.Top + 8;
rect_txt.Right = rect_txt.Right - ((rect_txt.Width) - Convert.ToInt32(text_num.ToString().Length) * 5);
rect_txt.Left = rect_txt.Left - 3.0f;
BaseFont helv = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
appearance = PdfAppearance.CreateAppearance(stamper.Writer, rect_txt.Width, rect_txt.Height);
appearance.Rectangle(0, 0, rect_txt.Width, rect_txt.Height);
appearance.SetFontAndSize(helv, 12);
appearance.SetColorFill(BaseColor.RED);
ColumnText.ShowTextAligned(appearance, Element.ALIGN_LEFT, new Phrase(text_num), 0, 0, 0);
//appearance.FillStroke();
// appearance.ShowTextAligned(Element.ALIGN_LEFT, text_num.ToString(), 0, 0, 0);
PdfAnnotation comment = PdfAnnotation.CreateFreeText(stamper.Writer, rect_txt, text_num.ToString(), cb);
comment.PlaceInPage = x;
comment.Put(PdfName.RC, new PdfString("<?xml version=\"1.0\"?><body xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:xfa=\"http://www.xfa.org/schema/xfa-data/1.0/\" xfa:APIVersion=\"Acrobat:11.0.13\" xfa:spec=\"2.0.2\" style=\"font-size:10px;text-align:left;color:#FF0000;font-weight:bold;font-style:normal;font-family:'helvetica';font-stretch:normal\"><p dir=\"ltr\"><span style=\"font-family:helvetica\">" + text_num.ToString() + "</span></p></body>", PdfObject.TEXT_UNICODE));
comment.BorderStyle = new iTextSharp.text.pdf.PdfBorderDictionary(0, 0);
comment.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, appearance);
stamper.AddAnnotation(comment, x);
该脚本不适用于WP。我还使用控制台检查了页面,我收到一个错误:
single-member-page.php“未找到
我是WP的新手,我不知道如何将数据从ajax调用传递到特定页面。
答案 0 :(得分:3)
@Daniel
你提出了一个非常好的问题,在继续解决之前我们需要了解wordpress ajax的拇指规则。
Thumb Rules:
根据wordpress标准,所有ajax请求都应该来到&#34; ajaxurl&#34;在javascript中。它实际上包含&#34; wp-admin / admin-ajax.php &#34;文件路径。
示例:
$.ajax({
url: ajaxurl,
data: {'action':'generateCptApiKey'},
success:function(data) {
console.log(data);
},
error: function(errorThrown){
console.log(errorThrown);
}
});
如果您在 wp-admin信息中心部分中进行了一些sutff,或者与wp-admin部分相关,例如在wp-admin信息中心区域中创建选项页面,那么& #34; ajaxurl&#34;全局变量将始终在javascript中可用。
如果从前端页面/帖子初始化此ajax请求的情况,则必须使用以下方法指定 admin-ajax.php 文件路径,如果您更好将其本地化为前端javascript,因此它将在javascript变量中提供,就像在wp-admin仪表板部分中可用一样。
为了实现这一目标,我们需要添加更多行代码。
方法:
更新了示例代码前端ajax调用:
// Register the script
wp_register_script( 'ajaxsettings', 'path/to/ajaxsettings.js' );
// Localize the script with new data
$ajaxsettings = array(
'ajaxurl' => admin_url('admin-ajax.php')
);
wp_localize_script( 'ajaxsettings', 'ajaxsettings', $ajaxsettings );
// Enqueued script with localized data.
wp_enqueue_script( 'ajaxsettings' );
$.ajax({
url: ajaxsettings.ajaxurl,
data: {'action':'generateCptApiKey'},
success:function(data) {
console.log(data);
},
error: function(errorThrown){
console.log(errorThrown);
}
});
在此之后我们需要编写方法来处理这个ajax请求并将输出发送回ajax调用。
为了在wordpress中检测ajax请求调用,它们有两个标准钩子,钩子就是我发送ajax请求时的事件,wordpress ajax相关钩子会触发,我可以调用该触发器上的任何函数。
所以基本上处理ajax请求下面是两个钩子:
此处(操作)是您必须在当前主题function.php文件中编码的方法的名称,此方法将处理此ajax请求。
<强>示例:强>
面向对象的风格:
add_action( 'wp_ajax_cleanResponseFiles', array($this, 'cleanResponseFiles'));
add_action( 'wp_ajax_nopriv_cleanResponseFiles', array($this, 'cleanResponseFiles'));
注意:此处&#34; cleanResponseFiles&#34;是将处理ajax请求的类的方法。和$这是指向当前的类对象。
程序风格:
add_action( 'wp_ajax_cleanResponseFiles', 'cleanResponseFiles');
add_action( 'wp_ajax_nopriv_cleanResponseFiles','cleanResponseFiles');
注意:此处&#34; cleanResponseFiles&#34;是在当前主题function.php文件中添加的函数,它将处理ajax请求。
在此我们正在考虑可以从wp-admin仪表板或从前端页面/帖子发出ajax请求。
示例ajax请求处理程序方法:
function cleanResponseFiles(){
echo "<pre>";
print_r($_POST);
echo "</pre>";
//Always use exit() in ajax request handler function end
exit();
}
Thumb规则:
仅仅通过添加CRSF来抓取Honeypot(跨站点请求伪造),使用生成的随机密钥隐藏输入字段,并且在请求处理程序方法中应该对其进行验证。< / p>
这些是我们可以用来创建Wordepress nonce并验证Wordpress nonce和ajax请求处理程序或简单http请求处理程序的方法。
Wordpress Nonce方法:
我将在此评论中附上一个关于wordpress ajax调用的工作示例。
答案 1 :(得分:0)
请参阅此https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)
基本上,您可以创建wp_ajax_myaction
之类的操作,您可以在functions.php
或您认为合适的地方进行定义。然后按照页面上的示例(使用部分)中的说明调用它。
编辑: 添加一些代码以帮助您理解
在functions.php
add_action( 'wp_ajax_my_ajax', 'my_ajax' );
add_action('wp_ajax_nopriv_my_ajax', 'my_ajax');
function my_ajax() {
die( "Hello World" );
}
在你的JS中:
$.ajax({
url: "http://yoursite.com/wp-admin/admin-ajax.php",
data : {action : 'my_ajax'},
success: function( data ) {
alert( 'The code says ' + data);
}
})
关于代码的一些事情:
这只是一个快速而肮脏的代码,大部分都是从示例中删除,只是为了向您展示它是如何工作的。
no_priv操作用于允许未经授权的访问(即非管理员用户)
url
通常不会按照示例中显示的方式进行硬编码,人们通常会使用admin_url( 'admin-ajax.php' )
数据中发送的action
确定应调用哪个函数。 (在我们的案例中为my_ajax
)
让我们知道你是否还有问题。
答案 2 :(得分:0)
简单说明:所有ajax帖子都应该发送到admin-ajax.php每个请求都需要提供至少一个名为action的数据。基于此操作,admin-ajax.php中的代码创建了两个钩子。 如果action的值是cusom_action,则自动创建wp_ajax_custom_action和wp_ajax_nopriv_custom_ction。检查WordPress coddex。 https://codex.wordpress.org/AJAX_in_Plugins