onetrickpony
  • 0
Гуру

Открытие толстого ящика с содержимым через AJAX

  • 0

Я добавил пользовательскую кнопку в редактор TinyMCE, и я хочу открывать WP Thickbox, когда я нажимаю на нее.

Как я могу сделать так, чтобы tb_show() функция загружала нужный мне контент с помощью ajax?

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

Вот код плагина редактора, который я использую:

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

Итак, OpenMyThickbox функция javascript должна делать то, что я хочу:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}
Share
  1. используйте admin_url(‘admin-ajax.php’); для URL

    • 0
  2. Второй параметр tb_show — это URL-адрес, поэтому вы можете использовать что-то вроде..

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

    Я предполагаю, что вам нужно передать действие и любые дополнительные переменные запроса вручную (как указано выше), иначе ваш запрос просто для admin-ajax.php, когда вы ищете что-то вроде… admin-ajax.php?action=getTheContent&someothervar=someothervalue, следовательно, add_query_arg использование выше..

    В целях разъяснения:

    Следующий звонок в add_query_arg

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

    Эквивалентно и будет производить…

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

    Однако!

    Теперь, объяснив себя, я пришел к выводу, что нам не нужен абсолютный URL-адрес и, следовательно, нам не нужен вызов admin_url там. Вместо этого должен быть код.

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

    Таким образом, результирующий URL-адрес выглядит примерно так.

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

    Функции, упомянутые в приведенных выше примерах кода:

    • 0
  3. Путать javascript и PHP не очень умно. Этот ответ только смутит.

    tb_show — это javascript, add_query_arg — это PHP

    поэтому это решение действительно только в PHP, и правильный код

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

    А в javascript вообще не действует, так как мы не можем использовать add_query_arg

    • 0

Оставить ответ

You must login to add an answer.