Передать переменную PHP в JavaScript

13

Есть ли возможность передать некоторые переменные PHP в JavaScript, чтобы я мог использовать их позже?

Только в single.php.
Я слышал об этом, wp_enqueue_scriptsно с этим необходимо объявить путь к файлу JS, но он мне не нужен.

Себастьян Корнелиу Вирлан
источник
Что вы будете иметь в виду позже , и где вы хотите использовать переменные (относительно того, где находятся переменные PHP)? Конечно, вы можете выводить / выводить код JavaScript через PHP и, таким образом, вставлять значения переменных PHP. Но это не то, что вы хотите, я думаю ...
tfrommen
Я создал новую таблицу БД с некоторыми response.id из Facebook API. Это таблица: action_id, user_id, post_id, fb_id, где fb_id - response.id из действия facebook. Затем в single.php у меня есть кнопка, где, если я нажимаю, я должен удалить действие fb с помощью api: FB.api ('/' + fb.response, 'delete'); где fb.response должен быть fb_id из таблицы.
Себастьян Корнелиу Вирлан

Ответы:

18

Метод лучшей практики

Посмотрите wp_localize_script, что именно для этого и предназначено.

Но это требует предыдущего использованияwp_enqueue_scripts , следовательно, вам нужно будет переместить JS в отдельный файл.
Это, безусловно, будет стоить этих нескольких минут усилий.

function wpse_96370_scripts()
{
    if ( is_single() ) {

        wp_register_script(
           'your_script_handle',
           get_template_directory_uri() . '/js/your-script.js',
           array( /* dependencies*/ ),
           1.0,
           true
       );

       wp_enqueue_script( 'your-script-handle' );

       $script_params = array(
           /* examples */
           'post' => 99,
           'users' => array( 1, 20, 2049 )
       );

       wp_localize_script( 'your-script-handle', 'scriptParams', $script_params );

    }
}
add_action( 'wp_enqueue_scripts', 'wpse_96370_scripts' );

В JS вы сможете использовать переданные параметры следующим образом:

var posts = scriptParams.post,
    secondUser = scriptParams.users[1]; /* index starts at 0 */

// iterate over users
for ( var i = 0; i < scriptParams.users.length; i++ ) {
    alert( scriptParams.users[i] );
}

[Изменить] Ваша ситуация

Согласно вашему комментарию

Я создал новую таблицу БД с некоторыми response.idиз Facebook API. Это таблица: action_id, user_id, post_id, fb_id, где fb_id - response.id из действия facebook. Затем в single.php у меня есть кнопка, где, если я нажимаю, я должен удалить действие fb с api: FB.api('/'+fb.response, 'delete');где fb.responseдолжно быть fb_idиз таблицы.

Поместите следующую /js/папку вашей темы , создайте ее, если она не существует.
Давайте назовем файл fb-response.js:

jQuery( '#button_id' ).click( function() {
    FB.api( '/' + fbParams.id, 'delete' );
});

Затем зарегистрируйтесь, поставьте в очередь и локализуйте, как показано выше. Предполагая, что у вас есть идентификатор, который вы хотите передать, скажем $fb_id:

wp_register_script(
    'fb-response',
     get_template_directory_uri() . '/js/fb-response.js',
     array( 'jquery' ),
     1.0,
     true
);

wp_enqueue_script( 'fb-response' );

wp_localize_script( 'fb-response', 'fbParams', array( 'id' => $fb_id ) );

NB Очевидно, вышеизложенное предполагает, что это в теме. Если мы говорим «плагин», измените местоположение соответственно.

Йоханнес Пилле
источник
Я немного новичок в этом, поэтому я пытаюсь реализовать это в моем WordPress : papermashup.com/jquery-iphone-style-ajax-switch . Как видите, в файле использования есть файл js и несколько строк кода js. Или я могу поместить эти несколько строк кода в другой файл?
Себастьян Корнелиу Вирлан
Таким образом, для любого маленького действия javascript я должен создать файл? Если вы доступны, вы можете добавить в скайп: sebyku17?
Себастьян Корнелиу Вирлан
Это зависит от того, что вы хотите сделать, где вы хотите это сделать и так далее. Обычно: нет, вам не нужно использовать внешний файл JS. Но если вы решите, вы можете поместить все, что хотите, в один файл . Нет необходимости в нескольких файлах, если у вас есть несколько функций, если это то, что вы просили. Тем не менее, вы уже приняли этот (ИМХО довольно сложный и в вашем случае слегка излишний ) ответ - не полностью поняв, насколько я понимаю. Без обид, @ Йоханнес. ;)
от
1
Не принято, @tf. Пока что это может быть пограничным излишним, но для одного его код может расти, а для другого первоначальный вопрос говорил о «переменных» во множественном числе. Ваш ответ так же действителен, поэтому +1 от меня.
Йоханнес Пилле
2
wp_localize_script - очень недостаточно используемая и мощная функция для передачи значений PHP в файл Javascript. Удивительно, что немногие люди на самом деле знают об этой мощной функции в Wordpress.
Дуэйн Чаррингтон
1

Прочитав ваш комментарий, я понимаю, что вы хотели бы сделать что-то вроде этого:

// Do something to get the ID
$facebook_id = ...

// Create and print the button
echo '<input onclick="FB.api('/'+'.$facebook_id.', 'delete')" />';
tfrommen
источник
Нет, это страница, на которой я работаю: funny-videoro.com/the-dark-knight-rises-trailer-oficial . Если вы хотите, вы можете войти на сайт. Затем вы увидите кнопку в стиле jquery ios. Когда я делаю слайд, я должен удалить с помощью fb api сообщение. Идентификатор поста находится в БД.
Себастьян Корнелиу Вирлан
Ну, это в основном то, что я написал в своем ответе. Получить идентификатор из базы данных и сохранить его в переменной. Затем непосредственно распечатайте его в своем вызове функции JavaScript в одну строку. Функция <input ... />и была предназначена только для демонстрации. Насколько я вас понял, там все сказано, что вам нужно. Если нет, пожалуйста, попробуйте объяснить немного больше, но в вашем вопросе, а не в комментариях.
tfrommen
Я не хочу использовать PHP и JS-код в одной строке, в WordPress некоторые функции автоматически ...
Себастьян Корнелиу Вирлан