在jQuery脚本中使用php代码-wp_localize_script()不起作用

在jQuery脚本中使用php代码-wp_localize_script()不起作用,jquery,wordpress,twitter-bootstrap,Jquery,Wordpress,Twitter Bootstrap,我想在wordpress循环中的元素上使用引导弹出。我有一个javascript函数,理想情况下应该提取文章的标题,将其存储在变量中并返回变量。。。但是,php块存储为sting。我在这里和其他地方看到过许多线程,解决方案是将php块放在中,但这在这里根本不起作用 弹出窗口显示: 我的脚本执行得太早了吗 用wp_enque_script()指定的.js文件中的我的代码: scripts.js jQuery(document).ready(function($){ share = funct

我想在wordpress循环中的元素上使用引导弹出。我有一个javascript函数,理想情况下应该提取文章的标题,将其存储在变量中并返回变量。。。但是,php块存储为sting。我在这里和其他地方看到过许多线程,解决方案是将php块放在
中,但这在这里根本不起作用

弹出窗口显示:

我的脚本执行得太早了吗

用wp_enque_script()指定的.js文件中的我的代码:

scripts.js

jQuery(document).ready(function($){  

share = function() {
    var title = script_vars.title;

    return title;
}

$('.share').popover({
        content: share(),
        placement: 'bottom'
        });
});

另外,
title()
permalink()

你可以这样做

在php文件中:

window.postTitle = "<?php echo the_title(); ?>";

.js文件不由php引擎处理,因此不会解释php标记

你可以这样做

在php文件中:

window.postTitle = "<?php echo the_title(); ?>";

您不能这样做,因为Javascript不是由PHP处理的。它只是像文本文件一样发送到浏览器


不过,您可以做的是将标题传递给脚本。此函数最初是为国际化/本地化而编写的,但它广泛用于在PHP和Javascript之间传递值的插件和主题中。

您不能这样做,因为PHP不处理Javascript。它只是像文本文件一样发送到浏览器


不过,您可以做的是将标题传递给脚本。此函数最初是为国际化/本地化而编写的,但它广泛用于在PHP和Javascript之间传递值的插件和主题中。

您的代码存在一些问题,这似乎是WordPress开发人员常见的小错误。让我们来整理一下

  • 本地化脚本是正确的方法
  • 您需要知道循环之外有哪些值可用,以及不在循环中时如何获取标题和永久链接
  • 在如何将脚本排队方面存在一些小问题
  • 我们将使用几个特定的函数

    • 获取标题($ID)
      将需要循环外部的post ID,并返回它以在PHP中使用,而不是将其回显出来
    • get_peramlink($ID)
      它也在循环之外工作,并返回永久链接以在PHP中使用
    • 我们将调整传递给排队脚本的参数,特别是
      array()
      应该是
      array('jquery')
      ,以显示它对jquery的依赖性,您正在脚本中使用jquery,我们也将jquery排队,并使用
      wp\u register\u脚本
    functions.php文件中

         function do_scripts()
         {  
             /* Get the ID of the current post */
             global $post;
             $ID = $post->ID;
    
             /* register the script */
             wp_register_script( 'custom', get_template_directory_uri() . '/js/scripts.js', array('jquery'), false, true );
             $script_vars = array(
                 'title'    => get_the_title( $ID ),
                 'url'      => get_permalink( $ID )
             );
    
             /* actually enqueue jquery (that ships with WP) and your custom script */
             wp_enqueue_script( 'jquery' );
             wp_enqueue_script( 'custom' );
    
             /* Localize the vairables */
             wp_localize_script('custom', 'script_vars', $script_vars);
    
        }
    
         /* If we're not in the admin section call our function on the wp_enqueue_scripts hook  */
         if ( !is_admin() ) add_action( "wp_enqueue_scripts", "do_scripts", 10 );
    
    这将通过创建一个全局javascript对象并在包含脚本之前输出它来实现

    scripts.js文件中,您可以访问此对象

     script_vars.title // will return the title
     script_vars.url // will return the permalink
    

    您的代码有一些问题,这似乎是WordPress开发人员的常见小错误。让我们来整理一下

  • 本地化脚本是正确的方法
  • 您需要知道循环之外有哪些值可用,以及不在循环中时如何获取标题和永久链接
  • 在如何将脚本排队方面存在一些小问题
  • 我们将使用几个特定的函数

    • 获取标题($ID)
      将需要循环外部的post ID,并返回它以在PHP中使用,而不是将其回显出来
    • get_peramlink($ID)
      它也在循环之外工作,并返回永久链接以在PHP中使用
    • 我们将调整传递给排队脚本的参数,特别是
      array()
      应该是
      array('jquery')
      ,以显示它对jquery的依赖性,您正在脚本中使用jquery,我们也将jquery排队,并使用
      wp\u register\u脚本
    functions.php文件中

         function do_scripts()
         {  
             /* Get the ID of the current post */
             global $post;
             $ID = $post->ID;
    
             /* register the script */
             wp_register_script( 'custom', get_template_directory_uri() . '/js/scripts.js', array('jquery'), false, true );
             $script_vars = array(
                 'title'    => get_the_title( $ID ),
                 'url'      => get_permalink( $ID )
             );
    
             /* actually enqueue jquery (that ships with WP) and your custom script */
             wp_enqueue_script( 'jquery' );
             wp_enqueue_script( 'custom' );
    
             /* Localize the vairables */
             wp_localize_script('custom', 'script_vars', $script_vars);
    
        }
    
         /* If we're not in the admin section call our function on the wp_enqueue_scripts hook  */
         if ( !is_admin() ) add_action( "wp_enqueue_scripts", "do_scripts", 10 );
    
    这将通过创建一个全局javascript对象并在包含脚本之前输出它来实现

    scripts.js文件中,您可以访问此对象

     script_vars.title // will return the title
     script_vars.url // will return the permalink
    

    此代码是在.php文件还是.js文件中?此脚本位于何处?代码位于.js文件中,该文件由
    wp\u enque\u script()组成
    您可以在PHP文件中内联使用此jQuery代码,而不是将此jQuery代码放在单独的.js文件中,它会工作。此代码是在.PHP文件中还是在.js文件中?此脚本位于何处?代码位于.js文件中,该文件与
    wp_enque_script()
    您可以在PHP文件中内联使用此jQuery代码,而不是将此jQuery代码放在一个单独的.js文件中,它会起作用。实际上,这不起作用,请参见编辑后的问题。谢谢@BojanaŠekeljić交换2个脚本引用回合;)@Archer不确定我是否理解?忽略最后一条注释-您正在
    文档中运行代码。ready
    处理程序,因此它不相关。查找由
    wp\u localize\u script
    创建的脚本,并确保存在正确的值。不能在外部使用\u title()。请改用。实际上这不起作用,请参阅编辑后的问题。谢谢@BojanaŠekeljić交换2个脚本引用回合;)@Archer不确定我是否理解?忽略最后一条注释-您正在
    文档中运行代码。ready
    处理程序,因此它不相关。查找由
    wp\u localize\u script
    创建的脚本,并确保存在正确的值。不能在外部使用\u title()。改用。