我试图将一个变量从模板传递给js,但没有成功。
我试过使用wp_localize_script
, 当连接到wp_enqueue_scripts
操作,但从模板内调用时它不起作用。我唯一的办法就是使用HTML&;data-
为了处理这个?
那就太好了,因为我已经通过了wp_query
那里
我的函数基本上是自定义WP\\U查询的包装器,允许在多个循环上加载更多功能。
function load_more_scripts() {
wp_register_script( \'loadmore\', get_stylesheet_directory_uri() . \'/assets/js/myloadmore.js\', array( \'jquery\' ) );
wp_enqueue_script( \'my_loadmore\' );
}
add_action( \'wp_enqueue_scripts\', \'load_more_scripts\' );
// this function is later called in the template
function get_list($query_args) {
if ( is_array( $query_args ) ) {
$the_query = new WP_Query( $query_args );
}
//...some more code
$instance = wp_generate_uuid4();
wp_localize_script( \'loadmore\', \'loadmore_params_\' . $instance , array(
\'ajaxurl\' => site_url() . \'/wp-admin/admin-ajax.php\', // WordPress AJAX
\'posts\' => json_encode( $the_query->query_vars ), // everything about your loop is here
\'current_page\' => get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1,
\'max_page\' => $the_query->max_num_pages
) );
}
Update看来问题可能出在多个脚本的本地化上。如果在页脚中注册要加载的脚本,则版本不添加
$instance
到
load_more_params
似乎有效。
SO网友:Manyang
wp\\u localize\\u脚本的目的是在加载特定javascript文件的地方打印javascript变量,如果您想在php模板中打印并且由于其特定区域,我认为您不需要使用wp\\u localize\\u脚本,只需打印它,就像
<script>
var posts = <?php echo json_encode($my_posts); ?>;
var current_page = <?php echo get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;?>;
var max_page = <?php echo $the_query->max_num_pages;?>
</script>
不需要打印ajaxurl,因为在更新的wordpress中它会自动打印。
当然,您可以在特定模板中调用依赖脚本,您可以使用
function specific_enqueue() {
if ( is_page( \'your template\' ) ) {
wp_enqueue_script( \'my_loadmore\' );
}
}
add_action( \'wp_enqueue_scripts\', \'specific_enqueue\' );
我认为没有安全问题,因为wp\\u像echo一样本地化了脚本,函数用html打印了var,每个人都可以查看inspect。