functions.php
ファイルの中には、特定のカテゴリの投稿を表示するAJAXコールバック関数があります。
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 shortcodeが使用されます。
私は今地元で取り組んでいます。カラーボックスではなく、単に ajaxを使用するだけのデモがあります。
略歴 divに電子メールリンクがあります。そのリンクをクリックすると、私はコンタクトフォームと一緒にカラーボックスを見せたいです。
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ハンドラ内で、レンダリングされたFormにアクセスできるようになりました。
IIRCあなたの問題は、AJAXリクエストが常に公開リクエストであっても管理者リクエストであることです。管理ページにはショートコードの出力がないので、文字列の戻り値以外に何もありません。
規則:AJAX内またはAdmin要求内でショートコードを実行しないでください。
wp_localize_script()
を使って - 上で説明したように - 値を渡します。