2017-12-06 19 views
0

私は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コールが乱れていますか?何の記事を返さないでしょう

+0

アクション名が正しくないと思います。次の_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'_に変更してください。 –

+0

ajaxのアクション名は正しいです.1つはログインしていないユーザー用で、もう1つはログインしていないユーザー用です。 [WPMUDEV](https://premium.wpmudev.org/blog/load-posts-ajax/)の引用符を参照してください。 'wp_ajax_ [action_name]形式を使用するフックは、ログインしているユーザーに対してのみ実行されます。 wp_ajax_norpiv_ [action_name]形式を使用するフックは、ログインしていないユーザーに対してのみ実行されます。 –

答えて

0

あなただけの「P」(1引数)を使用してPOSTを取得しようとする必要があり、AJAXのない場合は、以下のように

$postid = $_POST['postid'];  
    $args = array(
     'p' => $postid, 
     'post_type' => 'any' 
    ); 

をポストをフェッチするpost_typeとして「任意の」引数を渡す必要があります。 それを試して、結果を確認してください。

+0

それは問題だった、ありがとう! –

関連する問題