Otwórz Thickbox z zawartością przez AJAX

11

Dodałem niestandardowy przycisk do edytora TinyMCE i chcę otworzyć Thickbox WP po ​​kliknięciu na niego.

Jak mogę to zrobić, aby tb_show()funkcja ładowała żądaną zawartość za pomocą ajax?

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

Oto niektóre kody wtyczek edytora, których używam:

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

Więc OpenMyThickboxfunkcja javascript powinna robić to, co chcę:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}
onetrickpony
źródło
użyj admin_url ('admin-ajax.php'); dla
adresu
Dostaję pustą stronę. nawet jeśli
wejdę na

Odpowiedzi:

6

Drugi parametr tb_showto URL, więc będziesz chciał użyć czegoś takiego jak ...

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

Sądzę, że musisz ręcznie przekazać akcję i wszelkie dodatkowe zmienne zapytania (jak wyżej), w przeciwnym razie twoja prośba jest po prostu admin-ajax.php, gdy to, czego szukasz, jest zgodne z ... admin-ajax.php?action=getTheContent&someothervar=someothervalue, stąd add_query_argużycie powyżej. .

Dla wyjaśnienia:

Następujące wezwanie do add_query_arg...

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

Jest równoważny i wyprodukuje ...

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

Jednak!

Po wyjaśnieniu się doszedłem do wniosku, że nie chcemy bezwzględnego adresu URL, a zatem nie potrzebujemy tam wezwania admin_url. Zamiast tego powinien być kod.

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

Tak powstały adres URL wygląda mniej więcej tak ...

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

Funkcje przywołane w powyższych przykładach kodu:

t31os
źródło
Czy to nie $_get['action']dlatego, że szuka połączenia wywoływanego przez WordPress ajax $_post['action']? czy się mylę?
Bainternet,
Zazwyczaj będzie to wywołanie zwrotne ajax $_POSTlub $_REQUESTwewnątrz niego, chyba że jawnie ustawisz funkcję żądania ajax, aby getzamiast tego używała , w kontekście wywołania typu „box ”używamy ciągu zapytania, który powinien wciąż się pojawiać $_REQUEST(ponieważ zwykle zawiera on zarówno $_GETi $_POST) ..
t31os 18.04.18
Nie, pytam, czy używam add_query_arg, czy dodane argumenty zostaną wysłane jako post, czy otrzymają?
Bainternet,
Ani też nie add_query_argdołącza ciągu (adresu URL) z parametrami zapytania, nie wysyła żadnych wiadomości, więc nie jestem pewien, czy rozumiem twoje pytanie.
t31os
Zaktualizowałem moją odpowiedź ..
t31os,
3

Bałagan w javascript i PHP nie jest zbyt sprytny. Ta odpowiedź tylko myli.

tb_show to javascript add_query_arg to PHP

więc to rozwiązanie jest poprawne tylko w PHP, a poprawny kod to

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

I w javascript w ogóle nie jest poprawny, ponieważ nie możemy użyć add_query_arg

Bayen
źródło
Gdzie różni się to od rozwiązania, które zawiera <?php ?>tagi? Jeśli to wszystko, na co chcesz zwrócić uwagę, dokonaj edycji rozwiązania, aby je poprawić. Nie trzeba dodawać osobnej odpowiedzi, aby wyjaśnić, co jest nie tak z inną odpowiedzią. Dlatego doceniane są zmiany wprowadzane przez społeczność.
kaiser,
@kaiser Edycje zmieniające znaczenie postu zwykle nie są mile widziane. Jako osobna odpowiedź jest w porządku.
fuxia
@toscho A jak dokładnie to zmienia znaczenie ? Imo poprawia lub dodaje brakujące bity .
kaiser,
Bayen słusznie wskazał tutaj błąd, mieszałem PHP i JavaScript, naprawdę powinienem to wcześniej zauważyć. Dokonałem niezbędnych zmian w odpowiedzi i dziękuję za informację zwrotną (lubię wiedzieć, kiedy popełniam błędy).
t31os 11.04.13