Passare variabili PHP a JavaScript
È possibile passare delle variabili PHP a JavaScript per poterle utilizzare successivamente?
Solo nel file single.php
.
Ho sentito parlare di wp_enqueue_scripts
ma con quello è necessario dichiarare un percorso a un file JS, che non mi serve.

Metodo delle migliori pratiche
Dai un'occhiata a wp_localize_script
, che è proprio progettato per fare questo.
Ma richiede l'uso precedente di wp_enqueue_scripts
, quindi dovrai spostare il tuo JS in un file separato.
Varrà sicuramente la pena dedicare quei pochi minuti di sforzo.
function wpse_96370_scripts()
{
if ( is_single() ) {
wp_register_script(
'your_script_handle',
get_template_directory_uri() . '/js/your-script.js',
array( /* dipendenze */ ),
1.0,
true
);
wp_enqueue_script( 'your-script-handle' );
$script_params = array(
/* esempi */
'post' => 99,
'users' => array( 1, 20, 2049 )
);
wp_localize_script( 'your-script-handle', 'scriptParams', $script_params );
}
}
add_action( 'wp_enqueue_scripts', 'wpse_96370_scripts' );
Nel JS potrai poi utilizzare i parametri passati in questo modo:
var posts = scriptParams.post,
secondUser = scriptParams.users[1]; /* l'indice parte da 0 */
// scorri gli utenti
for ( var i = 0; i < scriptParams.users.length; i++ ) {
alert( scriptParams.users[i] );
}
[Modifica] La tua situazione
Come da tuo commento
Ho creato una nuova tabella nel db con alcuni
response.id
dell'api di facebook. Questa è la tabella: action_id, user_id, post_id, fb_id dove fb_id è response.id da un'azione facebook. Poi in single.php ho un pulsante che, se premuto, deve eliminare l'azione fb con l'api:FB.api('/'+fb.response, 'delete');
dovefb.response
dovrebbe esserefb_id
dalla tabella.
Inserisci quanto segue nella cartella /js/
del tuo tema, creala se non esiste.
Chiamiamo il file fb-response.js
:
jQuery( '#button_id' ).click( function() {
FB.api( '/' + fbParams.id, 'delete' );
});
Quindi registra, accoda e localizza come visto sopra. Supponendo che tu abbia l'ID che vuoi passare in, diciamo, $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 ) );
N.B. Ovviamente, quanto sopra presuppone che questo sia in un tema. Se stiamo parlando di un "plugin", modifica le posizioni di conseguenza.

Sono un po' principiante in questo, quindi sto cercando di implementare questo nel mio WordPress: http://papermashup.com/jquery-iphone-style-ajax-switch/. Come puoi vedere c'è un file js e poche righe di codice js da inserire nel file di utilizzo. Oppure posso mettere quelle poche righe di codice in un altro file?

Quindi per ogni piccola azione javascript dovrei creare un file? Se sei disponibile puoi aggiungermi su Skype: sebyku17 ?

Dipende da cosa vuoi fare, dove vuoi farlo, e così via. In generale: No, non devi usare un file JS esterno. Ma se scegli di farlo, puoi mettere quello che vuoi all'interno di un singolo file. Non c'è bisogno di più file se hai più funzioni, se è questo che stavi chiedendo. Tuttavia, hai già accettato questa (IMO piuttosto complessa e nel tuo caso leggermente eccessiva sorta di) risposta - senza averla pienamente compresa, come ho capito. Nessuna offesa, @Johannes. ;)

Beh, alla fine si riduce a una questione di preferenze personali, immagino. Ma una cosa è certa: più grande diventa la tua codebase, più difficile sarà leggerla in seguito, e più importante sarà mantenerla pulita. Io, personalmente, non mi piace avere codice lato server e lato client nello stesso file - con delle eccezioni, ovviamente. Una semplice riga con onclick
può certamente essere lasciata inline, ma rinunci anche alla potenza di wp_localize_script
.

Questa è la mia pagina: http://funny-videoro.com/the-dark-knight-rises-trailer-oficial/, dopo aver premuto sul player e fatto il login, in fondo al player c'è un pulsante, quando premi per spegnere dovrebbe cancellare il post su Facebook. Proverò a creare un file js per tutte le funzioni. Spero funzionerà.

Nessun problema, @tf. Finora potrebbe essere al limite dell'eccesso, ma da un lato il suo codice potrebbe crescere e dall'altro, la domanda iniziale parlava di "variabili", al plurale. La tua risposta è comunque valida, quindi +1 da parte mia.

Scusa per l'incomprensione, voglio rendere il codice pulito, php nel file php e js nel file js come ha detto Johannes Pille.

Il mio tema ha 2 file: custom-functions.php e theme_functions.php, in custom ho qualcosa come:
function my_deregister_scripts() {
wp_deregister_script( 'jquery' );
wp_enqueue_script('jquery'...
wp_enqueue_script('jquery-ui'...
wp_enqueue_script('jquery-superfish' ...
wp_enqueue_script('jquery-slider'
E in theme functions: `function mytheme_enqueue_scripts(){ wp_enqueue_script( 'jquery' );
} add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_scripts');` Dove dovrei registrare le mie variabili php?

Dove, @Sebastian, dipende di nuovo da te. La parte importante è agganciare l'enqueue con l'azione wp_enqueue_scripts
- ho aggiornato l'esempio generico sopra per includere anche quello.

Ho apportato le modifiche, funziona ma sono sicuro che il codice non sia ottimizzato, penso sia un po' confusionario lì dentro. È contro le regole di questo sito se chiedo a qualcuno in privato di dare un'occhiata al mio codice? Non è niente di grave e se vuoi pago.

Puoi certamente assumere un professionista, ma la rete stackexchange non è pensata per essere una piattaforma freelance. E se lo fosse, personalmente non avrei comunque tempo per lavori su commissione. Scusa. Inoltre, tieni presente che i commenti non sono pensati per discussioni prolungate - questa lunghezza ha probabilmente già generato un segnalamento ai moderatori - felice di aver aiutato, congratulazioni per aver fatto funzionare il tuo codice.

wp_localize_script è una funzione molto sottoutilizzata e potente per passare valori PHP a un file Javascript. È sorprendente come poche persone conoscano davvero questa potente funzionalità in Wordpress.

La penso allo stesso modo, @DigitalSea - è una delle funzionalità che amo di più in WP.

https://developer.wordpress.org/reference/functions/wp_add_inline_script/ dovrebbe essere l'opzione preferita al giorno d'oggi
MODIFICA: Dalla documentazione sopra:
function mytheme_enqueue_typekit() {
wp_enqueue_script( 'mytheme-typekit', 'https://use.typekit.net/.js', array(), '1.0' );
wp_add_inline_script( 'mytheme-typekit', 'try{Typekit.load({ async: true });}catch(e){}' );
}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_typekit' );
Quindi prima si accoda lo script, e poi si passano le variabili
Tuttavia questo codice genera semplicemente quanto segue
<script type="text/javascript" src="https://use.typekit.net/.js?ver=1.0"></script>
<script type="text/javascript"> try{Typekit.load({ async: true });}catch(e){} </script>
Nel mio caso, espongo semplicemente i dati di cui ho bisogno scrivendo direttamente il codice JavaScript (nel template) e usando una variabile globale JS con un nome specifico (non ho trovato un modo migliore) (usando Timber, in PHP puro dovrebbe essere equivalente)
<script>
my_global_variable.data1 = {{ custom_timber_function()|json_encode }}
</script>
$twig->addFunction(new Timber\Twig_Function('custom_timber_function', function () {
return [
'theme' => get_stylesheet_directory_uri(),
];
}));

No, questa è la pagina su cui sto lavorando: http://funny-videoro.com/the-dark-knight-rises-trailer-oficial/. Se vuoi puoi accedere al sito. Poi vedrai un pulsante in stile iOS con jQuery. Quando lo scorro su off devo eliminare con l'API di Facebook un post. L'ID del post è nel database.

Beh, questo è fondamentalmente ciò che ho scritto nella mia risposta. Recupera l'ID dal database e memorizzalo in una variabile. Poi stampalo direttamente nella tua chiamata JavaScript su una riga. Il <input ... />
e la sua funzione erano solo a scopo dimostrativo. Per come ho capito, è già stato detto tutto ciò di cui hai bisogno. Se non è così, per favore cerca di spiegare meglio, ma nella tua domanda, non nei commenti.
