2013-06-04 61 views
0

我想從Ultimate Facebook plugin中使用短代碼在AJAX彈出框中顯示FB連接按鈕,並且似乎無法使其正常工作。我在這個問題中搜索並使用了djb給出的解決方案 - 爲什麼插件的'do_shortcode'不能在AJAX請求中工作?但它只能部分工作。理想情況下,我希望用戶能夠使用FB登錄,然後將列表保存到她的帳戶。我想使用插件而不是嵌入直接代碼,因爲當有人使用FB連接時,也會在wordpress中創建一個新用戶。在Wordpress AJAX中不工作的短代碼

程序來重現問題 -

  • 轉到http://www.ajaymreddy.com/stg/country/india/#
  • 點擊開始
  • 選擇任何checboxes的 - 小心不上點擊文字對 複選框
  • 點擊保存彈出按鈕如果你沒有登錄,連接按鈕應該顯示出來。但是,只有短代碼文本是 當前顯示。

代碼中的functions.php -

//From http://wordpress.stackexchange.com/questions/53309/why-might-a-plugins-do-shortcode-not-work-in-an-ajax-request 
add_action('init', function() { 
    ps_register_shortcode_ajax('show_fblogin', 'show_fblogin'); 
}); 

function ps_register_shortcode_ajax($callable, $action) { 
    if (empty($_POST['action']) || $_POST['action'] != $action) 
    return; 
    call_user_func($callable); 
} 

function show_fblogin(){ 
     if (!is_user_logged_in()) 
      echo do_shortcode('[wdfb_connect]'); 
     die(); 
} 
add_action('wp_ajax_show_fblogin', 'show_fblogin'); 
add_action('wp_ajax_nopriv_show_fblogin', 'show_fblogin'); 

代碼在AJAX文件 -

$(document).on('click', '#saveBtn', function(){ 
      if (myAjax.loggedin==1) 
      { 
        jQuery.ajax({ 
        type: 'POST', 
        url: myAjax.ajaxurl, 

        data: { 
          action: 'save_whslist', 
          selected: selected.toString(), 
          whsNonce: myAjax.selectNonce, 
        }, 
        success: function(data, textStatus, XMLHttpRequest){ 
          selected = []; 
          modal.close(); 
          $("input.whsites").prop('disabled', true); 
          $("input.whsites").prop('checked', false); 
        }, 
        error: function(MLHttpRequest, textStatus, errorThrown){ 
          alert(errorThrown+' fail'); 
        } 
        }); 
      } 
      else 
      { 
        jQuery.ajax({ 
        type: 'POST', 
        url: myAjax.ajaxurl, 

        data: { 
          action: 'show_fblogin', 
          selected: selected.toString(), 
          whsNonce: myAjax.selectNonce, 
        }, 
        success: function(data, textStatus, XMLHttpRequest){ 
          modal.open({content: "<p>Please login to save your travel list<br /><span>No auto posts on your wall!</span></p>"+data}); 
        }, 
        error: function(MLHttpRequest, textStatus, errorThrown){ 
          alert(errorThrown+' fail'); 
        } 
        }); 
      } 
    }); 

回答

0

添加爲後人解決方案 - 我解決它通過添加FB.XFBML.parse() ;一旦AJAX調用成功返回。希望這可以幫助。