Übergeben Sie die PHP-Variable an Javascript

13

Gibt es eine Möglichkeit, einige PHP-Variablen in Javascript zu übergeben, damit ich sie später verwenden kann?

Nur in single.php.
Ich habe davon gehört, wp_enqueue_scriptsaber damit ist es notwendig, einen Pfad zu einer JS-Datei anzugeben, aber ich brauche keinen.

Sebastian Corneliu Vîrlan
quelle
Was machen Sie später und wo möchten Sie die Variablen verwenden (in Bezug darauf, wo sich die PHP-Variablen befinden)? Sie können natürlich JavaScript-Code über PHP ausgeben / drucken und so PHP-Variablenwerte einfügen. Aber das ist nicht das, was du willst, denke ich ...
18.04.13
Ich habe eine neue DB-Tabelle mit Response.ID`s von Facebook API erstellt. Dies ist die Tabelle: action_id, user_id, post_id, fb_id wobei fb_id response.id von einer Facebook-Aktion ist. Dann habe ich in single.php eine Schaltfläche, wo ich, wenn ich drücke, die fb-Aktion mit api löschen muss: FB.api ('/' + fb.response, 'delete'); Dabei sollte fb.response fb_id aus der Tabelle sein.
Sebastian Corneliu Vîrlan

Antworten:

18

Best-Practice-Methode

Schauen Sie sich an wp_localize_script, was genau das soll.

Es erfordert jedoch die vorherige Verwendung vonwp_enqueue_scripts . Daher müssen Sie Ihren JS in der Tat in eine separate Datei verschieben.
Es wird sich aber auf jeden Fall lohnen, diese paar Minuten zu arbeiten.

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

In der JS können Sie dann die übergebenen Parameter wie folgt verwenden:

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

[Bearbeiten] Deine Situation

Wie in Ihrem Kommentar angegeben

Ich habe eine neue DB-Tabelle mit ein paar response.ids von Facebook API erstellt. Dies ist die Tabelle: action_id, user_id, post_id, fb_id wobei fb_id response.id von einer Facebook-Aktion ist. Dann habe ich in single.php eine Schaltfläche, wo, wenn ich drücke, ich die fb-Aktion mit api löschen muss: FB.api('/'+fb.response, 'delete');wo fb.responsesollte fb_idaus der Tabelle sein.

Legen Sie den folgenden /js/Ordner Ihres Themas ab und erstellen Sie ihn, falls er nicht vorhanden ist.
Nennen wir die Datei fb-response.js:

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

Dann registrieren, einreihen und lokalisieren, wie oben gezeigt. Angenommen, Sie haben die ID, die Sie weitergeben möchten, sagen wir $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 Das oben Gesagte geht natürlich davon aus, dass es sich um ein Thema handelt. Wenn es sich um ein "Plugin" handelt, ändern Sie die Standorte entsprechend.

Johannes Pille
quelle
Ich bin ein kleiner Anfänger, also versuche ich, dies in meinem WordPress umzusetzen : papermashup.com/jquery-iphone-style-ajax-switch . Wie Sie sehen, gibt es eine js-Datei und ein paar Zeilen js-Code, die in die Verwendungsdatei eingefügt werden müssen. Oder kann ich diese wenigen Codezeilen in eine andere Datei einfügen?
Sebastian Corneliu Vîrlan
Also sollte ich für jede kleine JavaScript-Aktion eine Datei erstellen? Wenn Sie verfügbar sind, können Sie auf Skype hinzufügen: sebyku17?
Sebastian Corneliu Vîrlan
Das hängt davon ab, was Sie tun möchten, wo Sie das tun möchten und so weiter. Im Allgemeinen: Nein, Sie müssen keine externe JS-Datei verwenden. Aber wenn Sie möchten, können Sie alles, was Sie wollen, in einer einzigen Datei ablegen . Es sind keine mehreren Dateien erforderlich, wenn Sie mehrere Funktionen haben, wenn Sie danach gefragt haben. Allerdings haben Sie diese (meiner Meinung nach recht komplexe und in Ihrem Fall etwas übertriebene ) Antwort bereits akzeptiert - ohne sie vollständig verstanden zu haben, wie ich es nehme. Nichts für ungut, @Johannes. ;)
18.04.13
1
Keine vergeben, @tf. Bisher mag es ein Grenzüberschuss sein, aber für einen könnte sein Code wachsen und für einen anderen sprach die Anfangsfrage von "Variablen" im Plural. Deine Antwort ist genauso gültig, also +1 von mir.
Johannes Pille
2
wp_localize_script ist eine sehr wenig genutzte und leistungsstarke Funktion zum Übergeben von PHP-Werten an eine Javascript-Datei. Es ist überraschend, dass nicht viele Leute über diese leistungsstarke Funktion in Wordpress Bescheid wissen.
Dwayne Charrington
1

Nachdem Sie Ihren Kommentar gelesen haben, möchten Sie wie folgt vorgehen:

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

// Create and print the button
echo '<input onclick="FB.api('/'+'.$facebook_id.', 'delete')" />';
tfrommen
quelle
Nein, auf dieser Seite arbeite ich: funny-videoro.com/the-dark-knight-rises-trailer-oficial . Wenn Sie möchten, können Sie sich auf der Website anmelden. Dann sehen Sie eine Schaltfläche im Stil von jquery ios. Wenn ich auf off rutsche muss ich mit fb api einen post löschen. Die Beitrags-ID befindet sich in der Datenbank.
Sebastian Corneliu Vîrlan
Nun, das ist im Grunde das, was ich in meiner Antwort geschrieben habe. Rufen Sie die ID aus der Datenbank ab und speichern Sie sie in einer Variablen. Dann drucken Sie es direkt in Ihren einzeiligen JavaScript-Funktionsaufruf. Das <input ... />und seine Funktion diente nur zu Demonstrationszwecken. Soweit ich Sie verstanden habe, ist dort alles gesagt, was Sie brauchen. Wenn nicht, versuchen Sie bitte, etwas mehr zu erklären, aber in Ihrer Frage, nicht in Kommentaren.
Tfrommen
Ich möchte nicht PHP und JS Code in der gleichen Zeile verwenden, in WordPress sind einige automatisch Funktionen ...
Sebastian Corneliu Vîrlan