2010-11-28 5 views
2

Un problème est survenu lors de l'utilisation de commentaires_template lors de l'appel d'une fonction dans les fonctions de thème à l'aide d'AJAX. Il fonctionne correctement lorsqu'il est appelé pour le chargement de la première page, mais pas lorsqu'il est appelé pendant AJAX. Je pense qu'il y a des éléments manquants, mais je n'en sais pas assez pour comprendre quoi.Wordpress comments_template ne fonctionne pas sur l'appel AJAX

Voici l'essence du code de fonction qui se trouve dans mon fichier functions.php pour mon thème. (La chose entière beaucoup plus longtemps)

function displayLargePost ($postid) { 

// get the submitted postid parameter if set. 
if (!$postid) { 
    $postid = $_REQUEST['postID']; 
} 

$myposts = new WP_Query(); 
$myposts->query('p='.$postid); 
while($myposts->have_posts()) : $myposts->the_post(); 

// some formatting stuff is done then output post content 

the_content(); 

// some more formatting then output the comments template (doesn't work with AJAX) 

comments_template(); 

} 

`

Encore une fois, la fonction est exécutée lorsque l'appel AJAX est exécuté, tout fonctionne, sauf pour les sorties comments_template « 0 ».

Merci pour toute aide!

MISE À JOUR - Fonction entière après déterminer une solution de contournement à l'aide include (comments.php)

function displayLargePost ($postid) { 

if ($_REQUEST['action'] == "displayLargePost") { 
    require_once("../wp-load.php"); 
    global $wpdb; 
    $postid = $_REQUEST['postID']; 
    $ajax = 1; 
} 

$myposts = new WP_Query(); 
$myposts->query('p='.$postid); 
while($myposts->have_posts()) : $myposts->the_post(); 

>

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?> data-postid="<?php the_ID(); ?>"> 

     <div class="post-meta-mix clearfix"> 

      <h3 class="post-title post-title-mix"><?php the_title(); ?></h3> 

       <p class="post-info "> 
        <span>By <?php the_author_posts_link(); ?></span> 
        <?php the_time('l F j, Y') ?> 
       </p> 

     </div><!-- End div class="post-meta clearfix" --> 

     <div class="socialdiv socialdiv-mix"> 

      <?php if (function_exists('tweetmeme')) echo tweetmeme(); ?> 

       <div class="sharebutton"> 
       <fb:share-button href="<?php the_permalink(); ?>" type="button"></fb:share-button> 
      </div> 
       <div class="likebutton"> 
       <fb:like href="<?php the_permalink(); ?>" layout="button_count" show_faces="false" width="auto"></fb:like> 
       </div> 

      <?php if(get_post_meta($myposts->post->ID, "itunes_link", true)) : ?> 
         <div class="ituneslink"> 
           <?php echo get_post_meta($myposts->post->ID, "itunes_link", true) ?> 
       </div> 
      <?php endif; ?> 

      <?php if (get_post_meta($myposts->post->ID, "track_number", true) != '-1') : // Don't put the link to add to playlists on the mix intro post 
       if (function_exists('wpfp_link')) { ?> 
        <div class="favplaylistlink"> 
         <?php wpfp_link(); ?> 
        </div> 
      <?php } endif; ?> 

     </div><!-- socialdiv --> 

     <div class="post-box"><!--Single ID post box--> 

      <div class="page-content clearfix"><!--Single ID post box--> 

       <div class="clearfix monthlymix-box"><!--Single ID post box--> 

        <?php if(get_post_meta($myposts->post->ID, "image_value", true)) : ?> 

         <div class="post-image-inner post-image-mix left"> 
          <img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=<?php echo get_post_meta($myposts->post->ID, "image_value", true); ?>&amp;w=300&amp;h=300&amp;zc=1" alt="<?php the_title(); ?>" /> 
         </div> 

        <?php endif; ?> 


        <?php if(get_post_meta($myposts->post->ID, "download_url", true)) : ?> 

                    <p> 
                    <a href="<?php echo get_post_meta($myposts->post->ID, "download_url", true) ?>" target="blank" type="image/png" >Download this Track</a> 
                    </p> 

        <?php endif; ?> 


        <?php 
        // OUTPUT POST CONTENT 
        // Remove the YouTube embedded within post, add p tags to keep form 
        $text = preg_replace('/<center>httpv.*/','',get_the_content()); 
        $text = str_replace("\n", "</p><p>", $text); 
        echo '<p>'.$text.'</p>'; 
        ?> 

        <br /> 

       </div><!-- End div class="clearfix" --><!--Single ID post box--> 

      </div><!-- End post-content clearfix --><!--Single ID post box--> 

     </div><!-- End post-box --><!-- Single ID post box-->     

     <div class="monthlymix-bottom"> 
      <div class="video-mix"> 
       <div class="post-meta clearfix"> 
        <h3 class="post-title-small left">Video</h3> 
        <p class="post-info right"> 
        </p> 
       </div><!-- End post-meta --> 
       <div class="youtube-mix"> 
        <?php 
        if (get_post_meta($myposts->post->ID, "youtube_url", true)) : 
         $video = get_post_meta($myposts->post->ID, "youtube_url", true); 
         $video = preg_replace('/watch\?v=/', 'v/', $video); 
        ?> 
<span class="youtube"> 
<object width="400" height="325"> 
<param name="movie" value="<?php echo $video; ?>" /> 
<param name="allowFullScreen" value="true" /> 
<embed wmode="transparent" src="<?php echo $video; ? >&amp;color2=febd01&amp;fs=1&amp;showinfo=0" type="application/x-shockwave-flash"  allowfullscreen="true" width="400" height="325"></embed> 
<param name="wmode" value="transparent" /> 

   </div> 
      </div> 
      <div class="commentbox-mix"> 
       <?php 
       //comments_template(); 
       include('comments.php'); 
       ?> 
      </div> 
     </div> 

    </div><!-- End post ID--> 

<?php 
endwhile; // end of while have posts from new WP Query 
wp_reset_query(); // Restore global post data stomped by the_post(). 

if ($ajax) { 
    die; 
} 

} 

add_action('wp_ajax_displayLargePost', 'displayLargePost', 10, 1); 
add_action('wp_ajax_nopriv_displayLargePost', 'displayLargePost', 10, 1); 
+0

Pourquoi utilisez-vous comments_template(); dans cette fonction? Avez-vous essayé de l'appeler après la fonction displayLargePost()? Donnez-nous toute la fonction. –

+0

Merci pour la réponse Vlad! J'utilise comments_tempate juste parce que le thème l'utilise pour appeler le code comments.php. La fonction entière est ci-dessous. Mise à jour rapide, le 0 vient de die (0) qui était dans le fichier admin-ajax.php. J'ai obtenu une solution de contournement en utilisant include (comments.php) et en déclarant global $ post $ user_ID et $ user_identity à l'intérieur du fichier comments.php. – Ben

+0

Vlad, j'ai validé que admin-ajax.php est en train de charger wp-load.php, et que cela devrait à son tour charger toute la structure de Wordpress, y compris comment-template.php qui a un tas de fonctions liées aux commentaires. Pour une raison quelconque, cependant, cela ne fonctionne pas. Il n'y a pas d'erreur quand php frappe 'comments_template()' cependant. Alors peut-être le voit-il comme une fonction mais ne peut pas l'exécuter? La chose étrange est que tous les autres trucs de The Loop fonctionnent. – Ben

Répondre

4

comments_template ne fonctionne que pour les postes et des pages uniques. Pour le faire fonctionner, vous devez utiliser $ withcomments = true comme ceci:

global $withcomments; 

$withcomments = true; 
comments_template(); 

J'ai eu un problème similaire et résolu dans cette post

+0

Fonctionne comme un charme. Je vous remercie. –

Questions connexes