如何在模板中将php变量传递给js?

时间:2018-01-08 作者:Runnick

我试图将一个变量从模板传递给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看来问题可能出在多个脚本的本地化上。如果在页脚中注册要加载的脚本,则版本不添加$instanceload_more_params 似乎有效。

2 个回复
SO网友:D. Dan

如果您想传递整个wp查询,可以将其打包到数组中,然后json对其进行编码并将其写入标记中。

<?php my_posts = array();
              while ( have_posts() ) : the_post(); ?>
                    <?php
                    $properties = array(
                        \'title\' => get_the_title(),
                        \'link\' => get_the_permalink()
                    );
                    $my_posts[] = $properties; ?>
            <?php endwhile; wp_reset_query(); ?>

    <script>
                var posts = <?php echo json_encode($my_posts); ?>; 
               console.log(posts);
</script>
当然,这可能不是安全方面的最佳想法。

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。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post