AJAX回调中的DO_SHORT代码

时间:2013-11-07 作者:MidhuN

我的内部有一个AJAX回调函数functions.php 文件,其中显示特定类别中的帖子。

add_action( \'wp_ajax_ajaxified_function\', \'ajaxified_function\' );
add_action( \'wp_ajax_nopriv_ajaxified_function\', \'ajaxified_function\' );
function ajaxified_function() 
{ 
    $post = get_post($_POST[\'post_id\']);
    $feat_image = get_the_post_thumbnail($post->ID);
    $desc_values = get_post_custom_values("designation",$post->ID);
    $title = current(explode(\' \', get_the_title($post->ID)));
    if( is_array( $desc_values ) )
    {
     foreach($desc_values as $key => $value );
    }   
    $email_values = get_post_custom_values("email",$post->ID);
    if( is_array( $email_values ) )
    {
        foreach($email_values as $key => $email_value );
    }
    echo \'<div id="bloggers_avatar">\'.$feat_image.\'</div>\'.$post->post_.\'<div id="bloggers_title">\'.$post->post_title.\'</div><div id="bloggers_desig">\'.$value.\'</div><div id="emailid" ><a class="email_link">Email \'.$title.\'</a></div><br/><div id="postContent">\'.$post->post_content.\'</div>\'; 
    echo \'<script>
        jQuery(document).ready(function(){
            jQuery(".email_link").colorbox({inline:true,
               width:400,
               height:600,
               fixed:true,
               href:"#email_id_meet_the_team"
           });
       });
       </script>\';
       echo \'<div style="display:none">
           <div id="email_id_meet_the_team">
          <div>\';    
            echo do_shortcode(\'[contact-form-7 id="698" title="Meet The Team Email"]\');

           echo \'</div>
               </div>
          </div>\';
      die();
  }
我用这个的时候echoing 短代码,而不是显示联系人表单。

我现在在本地工作。我有一个演示,只使用the ajax, not the colorbox.

您可以在中看到电子邮件链接biography div.单击该链接后,我想显示一个带有联系人表单的颜色框。

1 个回复
SO网友:kaiser

如果您只需将脚本直接添加到主体中,而不是AJAX调用,那么它将变得更好、更容易。

短代码结果也是如此。只需使用短代码作为内部参数wp_localize_script():

wp_localize_script( \'script-handle\', \'pluginObject\', array(
    \'contactForm\' => do_shortcode( \'[contact-form-7 id="698" title="Meet The Team Email"]\' ),
) );
然后,在jQuery AJAX处理程序中,执行您需要执行的任何操作,例如插入联系人表单。

( function( $, plugin ) {
    $.ajax( {
        url  : plugin.ajaxurl,
        data : {
            action         : plugin.action,
            _ajax_nonce    : plugin._ajax_nonce,
            data           : { 
                plugin.contactForm 
            }
        },
        beforeSend : function( d ) {
            console.log( \'Before send\', d );
        }
    } )
        .done( function( response, textStatus, jqXHR ) {
            console.log( \'AJAX done\', textStatus, jqXHR, jqXHR.getAllResponseHeaders() );
            // this.processAJAXResponse( response );
        } )
        .fail( function( jqXHR, textStatus, errorThrown ) {
            console.log( \'AJAX failed\', jqXHR.getAllResponseHeaders(), textStatus, errorThrown );
        } )
        .then( function( jqXHR, textStatus, errorThrown ) {
            console.log( \'AJAX after finished\', jqXHR, textStatus, errorThrown );
        } );
} )( jQuery, pluginObject || {} );
现在,您应该可以访问AJAX回调中的呈现表单,也可以访问JavaScript AJAX处理程序中的呈现表单。

为什么你的问题是AJAX请求总是管理请求,即使是公开的。由于管理页面上没有短代码的输出,所以也只有字符串返回值。

Rule: Never try to run shortcodes inside AJAX or Admin requests.

<其他注意事项:不要在AJAX回调中添加脚本。这根本不是正确的做法。传递值-如上所述-使用wp_localize_script(). Stephen Harris 刚刚告诉我的in chat 我应该告诉你

结束

相关推荐

AJAX表单似乎已发送,但未返回

我有一个非常简单的表单,有3个复选框,允许用户将视频标记为不合适。我试图发出一个简单的ajax请求来创建一封电子邮件,并给用户一些反馈。表单似乎已发布,信息已发送到标题中,但未返回任何内容。我对使用ajax真的很陌生,所以我肯定我错过了一些东西。模板文件。php:<script type=\"text/javascript\"> var ajaxurl = \'<?php echo admin_url(\'admin-ajax.