0

我想在 wordpress 循环内的元素上使用 Bootstrap 弹出窗口。我有一个 javascript 函数,理想情况下应该提取帖子的标题,将其存储在变量中并返回变量......但是,php 块被存储为一个字符串。我在这里和其他地方看到了许多线程,解决方案是将 php 块放入其中,<?php ?>但这在这里不起作用。

弹出窗口显示:<?php echo the_title(); ?>

我的脚本执行得太早了吗?

我在 .js 文件中的代码与 wp_enque_script() 一起使用:

jQuery(document).ready(function($){  
share = function() {
    var title = "<?php echo the_title(); ?>";
    return title;
}

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

编辑

wp_localize_script()按照其中一个答案的建议使用,但变量返回null

函数.php

wp_enqueue_script( 'scripts', get_template_directory_uri() . '/js/scripts.js', array(), '', true );

wp_localize_script('scripts', 'script_vars', array(
        'title' => the_title(),
        'url' => the_permalink()
        )
    );

脚本.js

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

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

    return title;
}

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

此外,the_title()并在每个页面上的标记the_permalink()后回显<body>

4

3 回答 3

2

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

  1. 本地化脚本是执行此操作的正确方法。
  2. 您需要知道循环外可用的值,以及当您不在循环中时如何获取标题和永久链接。
  3. 您如何将脚本排入队列存在一些小问题。

我们将使用几个特定的​​函数

  • get_the_title( $ID );这将需要循环之外的帖子 ID 并将其返回以供 PHP 使用,而不是回显它。关联
  • get_peramlink( $ID )它也可以在循环之外工作,并返回用于 PHP 的永久链接。关联
  • 我们将调整您传递给入队脚本的参数,特别是array()应该array('jquery')显示它对您在脚本中使用的 jQuery 的依赖性,我们也会将 jquery 入队,并使用wp_register_script.

在您的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
于 2015-04-19T10:29:39.077 回答
2

.js 文件不被 php 引擎处理,因此不会解释 php 标签。

你可以做这样的事情..

在你的 php 文件中:

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

在你的 js 文件中:

$('.share').popover({
    content: window.postTitle,
    placement: 'bottom'
});
于 2013-10-04T14:12:08.413 回答
1

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

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

于 2013-10-04T14:13:46.523 回答