Pase la variable PHP a javascript

13

¿Existe alguna posibilidad de pasar algunas variables PHP en javascript para poder usarlas más tarde?

Sólo single.php.
Me enteré, wp_enqueue_scriptspero con eso es necesario declarar una ruta a un archivo JS, pero no necesito una.

Sebastian Corneliu Vîrlan
fuente
¿Qué quiere decir más tarde y dónde quiere usar las variables (con respecto a dónde están las variables PHP)? Por supuesto, puede hacer eco / imprimir el código JavaScript a través de PHP y, por lo tanto, insertar valores variables de PHP. Pero supongo que esto no es lo que quieres ...
tfrommen
Creé una nueva tabla db con algunos response.id`s de facebook api. Esta es la tabla: action_id, user_id, post_id, fb_id donde fb_id es response.id de una acción de Facebook. Luego, en single.php tengo un botón donde si presiono debo eliminar la acción fb con api: FB.api ('/' + fb.response, 'delete'); donde fb.response debe ser fb_id de la tabla.
Sebastian Corneliu Vîrlan

Respuestas:

18

Método de mejores prácticas

Echa un vistazo a wp_localize_script, que está destinado a hacer exactamente eso.

Pero requiere un uso previo dewp_enqueue_scripts , por lo tanto, deberá mover su JS a un archivo separado.
Sin embargo, valdrá la pena esos pocos minutos de esfuerzo.

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

En el JS, podrá utilizar los parámetros pasados ​​de la siguiente manera:

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] Tu situación

Según su comentario

Creé una nueva tabla db con algunas response.ids de la API de Facebook. Esta es la tabla: action_id, user_id, post_id, fb_id donde fb_id es response.id de una acción de Facebook. Luego, en single.php tengo un botón donde si presiono debo eliminar la acción fb con api: FB.api('/'+fb.response, 'delete');donde fb.responsedebería estar fb_iden la tabla.

Ponga la siguiente /js/carpeta de su tema , créelo, si no existe.
Llamemos al archivo fb-response.js:

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

Luego regístrese, ponga en cola y localice como se ve arriba. Suponiendo que tiene la identificación que le gustaría pasar, 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, lo anterior supone que esto está en un tema. Si estamos hablando de "complemento", modifique las ubicaciones en consecuencia.

Johannes Pille
fuente
Soy un principiante en esto, así que trato de implementar esto en mi wordpress: papermashup.com/jquery-iphone-style-ajax-switch . Como puede ver, hay un archivo js y algunas líneas de código js para colocar en el archivo de uso. ¿O puedo poner esas pocas líneas de código en otro archivo?
Sebastian Corneliu Vîrlan
Entonces, para cualquier pequeña acción de JavaScript, ¿debería crear un archivo? Si está disponible, ¿puede agregar en skype: sebyku17?
Sebastian Corneliu Vîrlan
Eso depende de lo que quieras hacer, dónde quieras hacerlo, etc. Generalmente: No, no tiene que usar un archivo JS externo. Pero si lo desea, puede poner lo que quiera dentro de un solo archivo . No hay necesidad de múltiples archivos si tiene múltiples funciones, si eso es lo que estaba pidiendo. Sin embargo, ya aceptó esta respuesta (en mi humilde opinión, bastante compleja y en su caso un poco exagerada ), sin haber entendido completamente, como lo considero. Sin ofender, @Johannes. ;)
tfrommen
1
Ninguno tomado, @tf. Hasta ahora podría ser una exageración límite, pero para uno su código podría crecer y para otro, la pregunta inicial hablaba de "variables", en forma plural. Sin embargo, su respuesta es igual de válida, por lo que es +1 de mi parte.
Johannes Pille
2
wp_localize_script es una función muy poco utilizada y poderosa para pasar valores PHP a un archivo Javascript. Es sorprendente que muchas personas no conozcan esta poderosa característica en Wordpress.
Dwayne Charrington
1

Después de leer su comentario, entiendo que le gustaría hacer algo como esto:

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

// Create and print the button
echo '<input onclick="FB.api('/'+'.$facebook_id.', 'delete')" />';
tfrommen
fuente
No, esta es la página donde estoy trabajando: funny-videoro.com/the-dark-knight-rises-trailer-oficial . Si lo desea, puede iniciar sesión en el sitio web. Luego verá un botón de estilo jquery ios. Cuando me deslizo a apagado, debo eliminar con fb api una publicación. El ID de la publicación está en la base de datos.
Sebastian Corneliu Vîrlan
Bueno, eso es básicamente lo que escribí en mi respuesta. Recupere la identificación de la base de datos y almacénela en una variable. Luego imprímalo directamente en su llamada de función de JavaScript de una línea. El <input ... />y su función era solo para fines demostrativos. Hasta donde te entendí, hay todo lo que necesitas. Si no, intente explicar un poco más, pero en su pregunta, no en los comentarios.
tfrommen
No quiero usar el código php y js en la misma línea, en wordpress hay algunas funciones automáticamente ...
Sebastian Corneliu Vîrlan