私はAjaxの初心者です。私が作業しているサイトのライトボックスにajaxを使ってポストをロードしようとしています。このアイデアは、アーカイブページの投稿をクリックすると、新しいページに行くのではなく、ポストライトボックスを開きます。ajaxはwp_queryを使用してポストを正しくプルしません。
マイコードは以下の通りです:私はポストをクリックしたときに私の問題がある
(function($) {
function find_post_ID(element) {
var link = $(element).parents('.post-link');
return $(link).find('.post-id').attr('id').replace('lightbox-',"")
}
if (window.innerWidth > 767) {
$(document).on('click', '.post-link', function(event) {
event.preventDefault();
$wp_postid = find_post_ID(event.target);
$.ajax({
url: ajaxpostload.ajaxurl,
type: 'post',
data: {
action: 'ajax_postload',
postid: $wp_postid,
query_vars: ajaxpostload.query_vars
},
beforeSend: function() {
$('.lightbox .image-info').remove();
$('.lightbox').append('<div class="image-info" id="loader"><h3>Loading Image...</h3></div>');
$('.lightbox').css('display' , 'block');
},
success: function(html) {
$('.lightbox #loader').remove();
$('.lightbox').append(html);
}
})
});
}
})(jQuery);
、ライトボックスが開きますが、:Javascriptのファイルでのfunctions.php
add_action('wp_enqueue_scripts', 'enqueue_scripts');
function enqueue_scripts() {
//other scripts
wp_localize_script('ajax-postload', 'ajaxpostload', array('ajaxurl' => admin_url('admin-ajax.php')));
}
add_action('wp_ajax_nopriv_ajax_postload', 'my_ajax_postload');
add_action('wp_ajax_ajax_postload', 'my_ajax_postload');
function my_ajax_postload() {
$postid = $_POST['postid'];
$args = array(
'p' => $postid
);
$posts = new WP_Query($args);
if(! $posts->have_posts()) {
?>
<div class="image-info">
<p>There has been an issue loading this image, please try again.</p>
</div>
<?php
}
else {
while ($posts->have_posts()) {
$posts->the_post();
?>
<div class="image-info">
<h3>Image Name: </h3>
<h4><?php the_title(); ?></h4>
<h3>Image Description:</h3>
<div class="description">
<?php the_content(); ?>
</div>
</div>
<div class="lightbox-image">
<?php the_post_thumbnail(); ?>
</div>
<?php
}
}
die();
}
で
no postsのエラーメッセージを表示します。何かシンプルなものが見つからないか、ajaxコールが乱れていますか?何の記事を返さないでしょう
アクション名が正しくないと思います。次の_wp_ajax_nopriv_ajax_postload_を_wp_ajax_nopriv_my_ajax_postload_、_wp_ajax_ajax_postload_を_wp_ajax_my_ajax_postload_、_action: 'ajax_postload'_を_action:' my_ajax_postload'_に変更してください。 –
ajaxのアクション名は正しいです.1つはログインしていないユーザー用で、もう1つはログインしていないユーザー用です。 [WPMUDEV](https://premium.wpmudev.org/blog/load-posts-ajax/)の引用符を参照してください。 'wp_ajax_ [action_name]形式を使用するフックは、ログインしているユーザーに対してのみ実行されます。 wp_ajax_norpiv_ [action_name]形式を使用するフックは、ログインしていないユーザーに対してのみ実行されます。 –