AJAXを介してコンテンツを含むThickboxを開く


11

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

したがって、OpenMyThickboxjavascript関数は私がやりたいことを行うはずです:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}

admin_url( 'admin-ajax.php');を使用します URL用
Bainternet、2011

空白のページが表示されます。私がgoogle.comに入ったとしても
onetrickpony

回答:


6

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

私は他のあなたの要求がために、単純である、あなたが行動に合格する必要があり、任意の追加のクエリは、(上記のとおり)手動varsの推測と思い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

上記のコードサンプルで参照されている関数:


$_get['action']WordPress ajax呼び出しが探すので、それはそうではあり$_post['action']ませんか?または私は間違っていますか?
Bainternet 2011

これは通常ajaxコールバック内$_POSTまたは$_REQUEST内部にありますが、get代わりにajaxリクエスト関数を使用するように明示的に設定しない限り、thickbox呼び出しのコンテキストでは、表示されるはずのクエリ文字列を使用します$_REQUEST(通常、両方が保持されるため$_GET$_POST)..
t31os

いいえ、add_query_arg追加した引数を使用する場合、私が求めているのは投稿または送信として送信されるのですか?
Bainternet 2011

どちらも、add_query_arg私は必ず私はあなたの質問を理解していないよので、それは任意の送信を行いません、クエリパラメータを持つ(URLの)文字列を付加しない...
t31os

私の答えを更新しました...
t31os

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を使用できないため、まったく無効です。


<?php ?>タグが含まれている以外は、ソリューションとどこが違うのですか?それだけを指摘したい場合は、ソリューションを編集して修正してください。別の回答のどこが悪いのかを説明するために、別の回答を追加する必要はありません。コミュニティの編集は高く評価されている理由です。
カイザー

@kaiser投稿の意味を変更する編集は通常歓迎されません。別の答えとして、これは問題ありません。
fuxia

@toschoそして、これはどのように正確に意味を変えていますか?芋それはだ修正または欠落しているビットを付加します
カイザー

ここで間違いを指摘するためにバイエンは正しかった、私はPHPとJavascriptを混ぜていた、私は本当にもっと早くそれを発見すべきだった。私は私の答えに必要な変更を加えました、そしてフィードバックbayenに感謝します(私はいつエラーを犯したかを知りたいです)。
t31os
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.