ここでの私の目標は、Ajaxを介してブログロールを私のテーマにロードすることです。しかし、応答として取得できるものはすべて0です(die()行を省略すると、空白の応答が返されます)。
これが私のコードです:
js ajax:
$.ajax({
url:"http://domain.com/wp-admin/admin-ajax.php",
type:'POST',
data:'action=load_men_blog',
//dataType:'html',
//cache: false,
success: function(html){
$("#b_contentwrapper").empty();
$("#b_contentwrapper").append(html);
}
});
PHP(functions.php):
function implement_ajax() {
while (have_posts()):
echo "azerty";
endwhile;
die();
}
add_action('wp_ajax_load_men_blog', 'implement_ajax');
add_action('wp_ajax_nopriv_load_men_blog', 'implement_ajax');
私は自分のデータベースに投稿を持っているので、私は失礼が返されることを期待しています。それでも私は空白の応答を受け取るか、die()行をコメントした場合は0を返します。 whileループの外側にエコーを配置すると、予想されるdivにエコーが表示されます。これは、JavaScriptが機能していることを意味します。
誰が私を正しい方向に向けることができますか?
ここでの問題は、投稿を何も照会していないということです。 have_posts
の前に何かを追加してみてください、query_posts( 'posts_per_page=5' );
こんにちは、そしてWPSEへようこそ。私はあなたのテーマにAJAXを実装するための別のアプローチを提案するかもしれません、それは私の意見でも同様に使うのが少し簡単です。
この記事 に基づいて、あなたができる最善のことは関数を実行するためにWPのネイティブadmin-ajax.php
ファイルを使うことです。あなたがあなたの質問に投稿したコードから、私はこれを思い付きました:(私はより良いコントロールのためにnonceと 'success'変数を追加しました、それがfunctions.php
でどのように定義されるかを見ることができます、どうぞあなたのニーズに合わせて修正してください。これは例です)
some-js-file.js
:
$.post( yourajax.ajaxurl, {
nonce: yourajax.nonce,
action: 'load_men_blog'
}, function( response ) {
if( response.success === true ) {
$( "#b_contentwrapper" ).empty().append( response.html );
} else {
alert( "There was an error with your request" );
}
}
functions.php
:
add_action( 'wp_ajax_nopriv_load_men_blog', 'load_men_blog' );
add_action( 'wp_ajax_load_men_blog', 'load_men_blog' );
add_action( 'wp_enqueue_scripts', 'load_some_scripts' );
function load_some_scripts() {
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'json2' );
wp_register_script( 'some-js-file', get_bloginfo( 'template_url' ) . '/some-js-file.js', array( 'jquery', 'json2' ) );
wp_enqueue_script( 'some-js-file' );
wp_localize_script( 'some-js-file', 'yourajax', array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'some-js-file-nonce' )
));
}
function load_men_blog() {
$nonce = $_POST['nonce'];
if ( !wp_verify_nonce( $nonce, 'some-js-file-nonce' ) )
die ( __( 'Busted!' ) );
$posts = get_posts( 'fields=ids' ); // Just gets post IDs, can be removed, added to save time
$return_str = '';
if( count( $posts ) > 0 ) {
$success = true;
foreach( $posts as $a_post ) // For each post in the DB..
$return_str .= "azerty"; // ..add 'azerty' to the string to return
} else {
$success = false;
}
$response = json_encode( array( 'success' => $success, 'html' => $return_str ) );
header( "content-type: application/json" );
echo $response;
exit;
}