Öffnen Sie eine Thickbox mit Inhalten über AJAX

11

Ich habe dem TinyMCE-Editor eine benutzerdefinierte Schaltfläche hinzugefügt und möchte die Thickbox von WP öffnen, wenn ich darauf klicke.

Wie kann ich dafür sorgen, dass die tb_show()Funktion den gewünschten Inhalt mit Ajax lädt?

// the ajax
add_action('wp_ajax_getTheContent', 'getTheContent');
function getTheContent(){
  echo 'weqwtegeqgr'; // <- this should be displayed in the TB
  die();
}

Hier ist ein Teil des Editor-Plugin-Codes, den ich verwende:

init : function(ed, url) {
  ed.addButton('do_stuff', {
    title : 'Do Stuff',
    image : url + '/icon.gif',
    onclick : function() {
        OpenMyThickbox('do_stuff');
    }
  });
...

Die OpenMyThickboxJavascript-Funktion sollte also tun, was ich will:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}
Onetrickpony
quelle
benutze admin_url ('admin-ajax.php'); für URL
Bainternet
Ich bekomme eine leere Seite. selbst wenn ich google.com
betrete

Antworten:

6

Der zweite Parameter für tb_showist die URL, daher sollten Sie so etwas wie ... verwenden.

<?php 
$ajax_url = add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    admin_url( 'admin-ajax.php' ) 
); 
?>
tb_show(tag, '<?php echo $ajax_url; ?>' );

Ich würde vermuten, dass Sie die Aktion und alle zusätzlichen Abfragevariablen manuell übergeben müssen (wie oben beschrieben), sonst ist Ihre Anfrage einfach für admin-ajax.php, wenn das, wonach Sie suchen, etwas in der Art von ... ist admin-ajax.php?action=getTheContent&someothervar=someothervalue, daher die add_query_argobige Verwendung. .

Zur Klarstellung:

Der folgende Aufruf an add_query_arg...

add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    admin_url( 'admin-ajax.php' ) 
);

Ist gleichbedeutend mit und wird produzieren ...

http://example.com/wp-admin/admin-ajax.php?action=getTheContent&query_var1=value1&query_var2=value2

Jedoch!

Nachdem ich mich jetzt erklärt habe, ist mir klar geworden, dass wir die absolute URL nicht wollen und daher keinen Anruf benötigen admin_url. Der Code sollte stattdessen sein.

<?php 
$ajax_url = add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    'admin-ajax.php'
); 
?>
tb_show(tag, '<?php echo $ajax_url; ?>'); 

Die resultierende URL sieht also ungefähr so ​​aus.

admin-ajax.php?action=getTheContent&query_var1=valu1&query_var2=value2

Funktionen, auf die in den obigen Codebeispielen verwiesen wird:

t31os
quelle
Wird das nicht so sein, $_get['action']weil WordPress Ajax Call sucht $_post['action']? oder liege ich falsch?
Bainternet
Es wird normalerweise $_POSToder $_REQUESTinnerhalb eines Ajax-Rückrufs sein, es sei denn, Sie haben explizit festgelegt, dass Ihre Ajax-Anforderungsfunktion getstattdessen verwendet wird. Im Kontext eines Thickbox-Aufrufs verwenden wir eine Abfragezeichenfolge, die weiterhin in angezeigt werden sollte $_REQUEST(da dies normalerweise sowohl $_GETals als auch enthält $_POST) ..
t31os
Nein, ich frage, ob ich add_query_argdie hinzugefügten Argumente als Post verschicke oder bekomme?
Bainternet
Weder add_query_arghängt eine Zeichenfolge (einer URL) mit Abfrageparametern an, es wird nicht
gesendet
Aktualisiert meine Antwort ..
t31os
3

Javascript und PHP durcheinander zu bringen ist nicht sehr klug. Diese Antwort verwirrt nur.

tb_show ist Javascript add_query_arg ist PHP

Diese Lösung ist also nur in PHP gültig und der richtige Code ist

...
?>
tb_show(
  'whatever',
  <?php echo add_query_arg( array(
    'action' => 'getTheContent',
    'query_var1' => 'value1',
    'query_var2' => 'value2',
  ), 'admin-ajax.php'); ?>
);
<?php
...

Und in Javascript ist überhaupt nicht gültig, da wir add_query_arg nicht verwenden können

Bayen
quelle
Wo unterscheidet sich das von der Lösung, abgesehen davon, dass sie die <?php ?>Tags enthält? Wenn das alles ist, worauf Sie hinweisen möchten, nehmen Sie bitte eine Änderung an der Lösung vor, um sie zu korrigieren. Sie müssen keine separate Antwort hinzufügen, um zu erklären, was mit einer anderen Antwort nicht stimmt. Aus diesem Grund werden Community-Änderungen geschätzt.
Kaiser
@kaiser Änderungen, die die Bedeutung eines Beitrags ändern, sind normalerweise nicht erwünscht. Als separate Antwort ist dies in Ordnung.
Fuxia
@toscho Und wie genau ändert das die Bedeutung ? Imo es korrigiert oder fügt die fehlenden Bits hinzu .
Kaiser
Bayen hat zu Recht auf den Fehler hingewiesen, ich habe PHP und Javascript gemischt, das hätte ich eigentlich früher erkennen sollen. Ich habe die notwendigen Änderungen an meiner Antwort vorgenommen und danke für das Feedback (ich möchte wissen, wenn ich Fehler mache).
t31os