Passar variável PHP para javascript

13

Existe alguma possibilidade de passar algumas variáveis ​​PHP em javascript para que eu possa usá-las mais tarde?

Somente em single.php.
Ouvi falar, wp_enqueue_scriptsmas com isso é necessário declarar um caminho para um arquivo JS, mas não preciso de um.

Sebastian Corneliu Vîrlan
fonte
O que você procura mais tarde e onde deseja usar as variáveis ​​(com relação a onde estão as variáveis ​​do PHP)? É claro que você pode fazer eco / imprimir código JavaScript via PHP e, assim, inserir valores de variáveis ​​PHP. Mas isso não é o que você quer, eu acho ...
tfrommen
Eu criei uma nova tabela de banco de dados com alguma response.id`s da API do Facebook. Esta é a tabela: action_id, user_id, post_id, fb_id em que fb_id é response.id de uma ação do facebook. Então, no single.php, tenho um botão onde, se eu pressionar, devo excluir a ação fb com api: FB.api ('/' + fb.response, 'delete'); onde fb.response deve ser fb_id da tabela.
Sebastian Corneliu Vîrlan

Respostas:

18

Método de boas práticas

Dê uma olhada wp_localize_script, o que se destina a fazer exatamente isso.

Mas requer o uso anterior dewp_enqueue_scripts , portanto, você precisará mover seu JS para um arquivo separado.
Vale a pena aqueles poucos minutos de esforço, com certeza.

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' );

No JS, você poderá usar os parâmetros passados ​​da seguinte maneira:

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] );
}

[Editar] Sua situação

Conforme seu comentário

Eu criei uma nova tabela db com alguns response.ids da API do Facebook. Esta é a tabela: action_id, user_id, post_id, fb_id em que fb_id é response.id de uma ação do facebook. Então, no single.php, tenho um botão onde, se eu pressionar, devo excluir a ação fb com api: FB.api('/'+fb.response, 'delete');where fb.responsedeve estar fb_idda tabela.

Coloque a seguinte /js/pasta do seu tema , crie-a, se ela não existir.
Vamos chamar o arquivo fb-response.js:

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

Em seguida, registre, enfileire e localize como visto acima. Supondo que você tenha o ID que deseja passar, digamos $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: Obviamente, o exposto acima pressupõe que esse seja um tema. Se estivermos falando de "plugin", altere os locais de acordo.

Johannes Pille
fonte
Eu sou um pouco iniciante nisso, então tento implementar isso no meu wordpress: papermashup.com/jquery-iphone-style-ajax-switch . Como você pode ver, há um arquivo js e algumas linhas de código js para inserir no arquivo de uso. Ou posso colocar essas poucas linhas de código em outro arquivo?
Sebastian Corneliu Vîrlan
Portanto, para qualquer ação javascript pequena, devo criar um arquivo? Se você estiver disponível, você pode adicionar no skype: sebyku17?
Sebastian Corneliu Vîrlan
Isso depende do que você quer fazer, onde você quer fazer e assim por diante. Geralmente: Não, você não precisa usar um arquivo JS externo. Mas se você escolher, poderá colocar o que quiser dentro de um único arquivo . Não há necessidade de vários arquivos se você tiver várias funções, se é isso que você estava perguntando. No entanto, você já aceitou esta (IMHO bastante complexa e, no seu caso, um pouco exagerada ) resposta - sem ter entendido completamente, como eu entendo. Sem ofensa, @Johannes. ;)
tfrommen
1
Nenhuma tomada, @tf. Até o momento, pode ser um exagero limítrofe, mas para um, seu código pode crescer e, para outro, a pergunta inicial falou de "variáveis", na forma plural. Sua resposta é tão válida quanto, portanto, +1 de mim.
Johannes Pille
2
wp_localize_script é uma função muito subutilizada e poderosa para passar valores PHP para um arquivo Javascript. É surpreendente que muitas pessoas não conheçam esse recurso poderoso no Wordpress.
Dwayne Charrington
1

Depois de ler seu comentário, entendo que você gostaria de fazer algo assim:

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

// Create and print the button
echo '<input onclick="FB.api('/'+'.$facebook_id.', 'delete')" />';
tfrommen
fonte
Não, esta é a página em que estou trabalhando: funny-videoro.com/the-dark-knight-rises-trailer-oficial . Se você quiser, pode acessar o site. Então você verá um botão no estilo jquery ios. Quando deslizo para fora, devo excluir com fb api uma postagem. O ID da postagem está no banco de dados.
Sebastian Corneliu Vîrlan
Bem, foi basicamente o que escrevi na minha resposta. Recupere o ID do banco de dados e armazene-o em uma variável. Em seguida, imprima-o diretamente em sua chamada de função JavaScript de uma linha. O <input ... />e sua função era apenas para fins de demonstração. Tanto quanto eu entendi, tudo diz o que você precisa. Caso contrário, tente explicar um pouco mais, mas na sua pergunta, não nos comentários.
tfrommen
Eu não quero usar php e js código na mesma linha, em wordpress algumas funções automaticamente ...
Sebastian Corneliu Vîrlan