Shortcode in AJAX popup

时间:2013-06-03 作者:Ajay R

我试图使用Ultimate Facebook插件的一个短代码在AJAX弹出窗口中显示FB connect按钮,但似乎无法正常工作。我搜索并使用了djb在这个问题上给出的解决方案-Why might a plugin's 'do_shortcode' not work in an AJAX request?, 但它只起了部分作用。理想情况下,我希望用户能够使用FB登录,然后将列表保存到她的帐户。我想使用插件而不是嵌入直接代码,因为当有人使用FB connect时,也会在wordpress中创建新用户。

复制问题的程序-

转到http://www.ajaymreddy.com/stg/country/india/#Code in functions.php -

//From https://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\' );
Code in ajax file -

$(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\');
                    }
                    });
            }
    });

1 个回复
SO网友:Ajay R

为后代添加解决方案-我通过添加FB解决了它。XFBML。parse();一旦AJAX调用成功返回。希望这有帮助。

结束

相关推荐

如何使用AJAX加载WordPress侧边栏

我在我的网站上使用响应式设计。一切都很好,只是在手机上,我的网站太长了。对于一个移动屏幕来说,内容太多了——侧边栏占用了太多的垂直空间,其中包含了很多小部件,如流行帖子、最近的评论等。为了使网站更小,如果从小屏幕查看,我希望侧边栏完全不加载。我不想将display:hidden应用于侧栏容器。那太愚蠢了。因此,最有效的方法是使用AJAX加载侧栏,如果视口宽度小于800px,则将其排除。谁能告诉我这是否可能?如果可以做到这一点,请给出一些示例和一些教程的链接。我在google上搜索了很多,但只找到了一个教程