我想在JS中进行Ajax调用,我不想在整个网站中排队。
为此,我将脚本直接放在与之相关的帖子末尾,而不是添加wp_enqueue_script()
.
到目前为止,它工作得很好,但我需要在脚本中添加一个Ajax调用,但这似乎不起作用,因为我不知道如何设置wp_localize_script()
该上下文中的命令。
预期结果是显示警报1
单击按钮时。
职位是:
<button id="button">
Click me!</button><script type="text/javascript" src="../script.js"></script>
js文件类似于:
jQuery(document).ready(function($){
var s=1;
$(\'button\').on(\'click\',function() {
//wfire the ajax call
jQuery.ajax({
url : postbutton.ajax_url,
type : \'post\',
data : {
//name of the function defined in the main plugin php file
action : \'function\',
data : s
},
success : function( response ) {
alert(response);
}
});
});
});
PHP如下所示:
add_action(\'wp_ajax_function\',\'function);
add_action( \'wp_enqueue_scripts\', \'function_enqueue_scripts\' );
function function_enqueue_scripts() {
//I would not like to enqueue js script since I appended it directly in the post
//wp_enqueue_script( \'ff\', \'../script.js\', array(\'jquery\'), \'1.0\', true );
wp_localize_script( \'ff\', \'postbutton\', array(
\'ajax_url\' => admin_url( \'admin-ajax.php\' ),
));
};
function function() {
$s=$_REQUEST[\'s\'];
return $s;
}
最合适的回答,由SO网友:cybmeta 整理而成
如果内联添加脚本,则无需使用wp_localize_script
. 你所要做的就是直接打印你的内联脚本,就像你需要的那样。
例如,在模板中:
<?php
// The PHP code of the template here
?>
<script>
jQuery(document).ready(function($){
var s=1;
$(\'button\').on(\'click\',function() {
//wfire the ajax call
jQuery.ajax({
url : postbutton.ajax_url,
type : \'post\',
data : {
//name of the function defined in the main plugin php file
action : \'function\',
ajax_url : <?php echo esc_js( admin_url( \'admin-ajax.php\' ) ); ?>;
},
success : function( response ) {
alert(response);
});
});
});
</script>
<?php
// PHP code of the rest of the template
?>
不管怎样,你做错了。如果直接打印内联脚本,
you can not use the power of WordPress dependencies manager 你最终可能会遇到很多问题。例如,如果决定将jQuery移动到页脚,依赖于jQuery的内联JavaScript将停止工作。另一个例子是
imposibility of localize the script because it has not an associate handle.
所以,如果你的脚本依赖于其他脚本,ALWAYS use WordPress dependencies manager.
而且您只能在单个帖子中对脚本排队,这不是问题:
add_action( \'wp_enqueue_scripts\', \'function_enqueue_scripts\' );
function function_enqueue_scripts() {
if( is_singular( \'post\' ) {
// Enqueue my script that depends on jQuery
// only in single post view
wp_enqueue_script( \'my-script\', get_template_directory_uri() . \'/script.js\', array(\'jquery\'), \'1.0\', true );
}
}
由于即将推出的WordPress 4.5,您可以使用新功能打印具有依赖项的内联scritps
wp_add_inline_script()
. 在此之前,我重申,永远不要打印依赖于其他脚本的脚本,否则您无法管理依赖关系,包括本地化。