컨텐츠 트로프 AJAX로 Thickbox 열기


11

TinyMCE 편집기에 커스텀 버튼을 추가했는데, 클릭하면 WP의 Thickbox를 열고 싶습니다.

그래서 어떻게 그것을 만들 수있는 tb_show()기능로드 내가 아약스와 함께 할 내용?

// 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자바 스크립트 함수는 내가 원하는 것을해야합니다.

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

admin_url ( 'admin-ajax.php')을 사용하십시오; 에 대 한 URL
Bainternet

빈 페이지가 나타납니다. google.com에 들어가더라도
onetrickpony

답변:


6

에 대한 두 번째 매개 변수 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

위 코드 샘플에서 참조 된 함수 :


$_get['action']WordPress 아약스 호출이 검색하기 때문에 그렇지 $_post['action']않습니까? 아니면 내가 틀렸어?
Bainternet

그것은 수 있습니다 $_POST또는 $_REQUEST내부 아약스 콜백 일반적으로, 당신은 명시 적으로 사용하도록 아약스 요청 기능을 설정하지 않는 get대신, Thickbox와 통화의 맥락에서, 우리는 여전히에 표시해야 쿼리 문자열, 사용 $_REQUEST이 일반적으로 보유하고 있기 때문에을 (모두 $_GET$_POST) ..
t31os

아니요, 내가 사용하는 경우 add_query_arg추가 된 인수가 게시물로 보내지 않습니까?
Bainternet

또한 add_query_arg쿼리 매개 변수를 사용하여 URL의 문자열을 추가하지 않으므로 전송하지 않으므로 질문을 이해하지 못합니다.
t31os

내 답변을 업데이트 ..
t31os

3

자바 스크립트와 PHP를 엉망으로 만드는 것은 그리 영리하지 않습니다. 이 답변은 혼동됩니다.

tb_show는 자바 스크립트입니다. 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
...

그리고 우리는 add_query_arg를 사용할 수 없으므로 자바 스크립트에서는 전혀 유효하지 않습니다.


<?php ?>태그가있는 것 외에는 솔루션과 다른 점은 무엇입니까? 그것이 당신이 지적하고 싶은 전부라면, 해결책을 수정하여 수정하십시오. 다른 답변의 문제점을 설명하기 위해 별도의 답변을 추가 할 필요가 없습니다. 이것이 커뮤니티 편집에 감사하는 이유입니다.
kaiser December

@kaiser 게시물의 의미를 변경하는 편집은 일반적으로 환영받지 않습니다. 별도의 답변으로 이것은 괜찮습니다.
fuxia

@toscho 그리고 이것이 정확히 의미를 바꾸는 것은 무엇입니까? 이모 그것은 누락 된 비트를 수정 하거나 추가하고 있습니다.
kaiser

Bayen은 여기에 실수를 지적하는 것이 옳았습니다 .PHP와 Javascript를 혼합하고 있었기 때문에 실제로 더 빨리 발견해야합니다. 내 답변에 필요한 변경을 수행했으며 피드백 bayen (오류가 발생하는 시점을 알고 싶습니다)에 감사드립니다.
t31os
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.