2013-10-04 85 views
0

我想在wordpress循環中的元素上使用Bootstrap彈出窗口。我有一個JavaScript函數,應該理想地拉動帖子的標題,將其存儲在變量中並返回變量...但是,php塊存儲爲一個刺痛。我在這裏和其他地方看到了很多線程,解決方案是將php塊放在<?php ?>之內,但在這裏不起作用。在jQuery腳本中使用php代碼 - wp_localize_script()不起作用

的酥料餅顯示:<?php echo the_title(); ?>

是我的腳本執行的太早了?

我在.js文件的代碼被enqued與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

functins.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() 
     ) 
    ); 

scripts.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>標籤

+0

此代碼是在.php文件還是.js文件中? –

+0

此腳本位於何處? –

+0

代碼位於'wp_enque_script()'.js文件中。' –

回答

2

您的代碼存在一些問題,這些問題似乎是WordPress開發人員常見的小錯誤。讓我們把它排序。

  1. 本地化腳本是正確的方法。
  2. 您需要知道循環外有什麼值可用,以及如何在不在循環中時獲得標題和固定鏈接。
  3. 如何讓您的腳本排隊有幾個小問題。

我們將使用幾個特定功能

  • get_the_title($ID);這將需要後ID的循環之外,並返回它在PHP中使用,而不是echo'ing出來。 link
  • get_peramlink($ID)它也在循環外工作,並返回PHP中使用的永久鏈接。 link
  • 我們將調整您傳遞給排隊腳本的參數,具體來說,array()應該是array('jquery')以顯示它對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 
2

.js文件不被PHP引擎處理後迴盪,使PHP標籤贏得」不能被解釋。

你可以做這樣的事情..

在你的PHP文件:

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

在你的js文件:

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

你不能那樣做,因爲Javascript沒有被PHP處理。它只是像文本文件一樣發送到瀏覽器。

可以做,雖然,使用wp_localize_script將標題傳遞到您的腳本。此功能最初是爲國際化/本地化而編寫的,但它廣泛用於插件&主題,用於在PHP之間傳遞值& Javascript。

+0

+1這是一個很好,乾淨的做法。 – Archer

+0

實際上這不起作用,請參閱編輯的問題。謝謝! –

+0

@BojanaŠekeljić交換2個腳本引用回合;) – Archer