Wordpress comments_template не работает на вызов AJAX - PullRequest
2 голосов
/ 29 ноября 2010

У меня возникла проблема с тем, что comments_template работал при вызове его в функции в функциях темы с использованием AJAX Он отлично работает, когда вызывается для первой загрузки страницы, но не при вызове во время AJAX. Я думаю, что некоторые из них отсутствуют, но я не знаю достаточно здесь, чтобы понять, что.

Вот суть кода функции, который находится в моем файле functions.php для моей Темы. (все это намного дольше)

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();

}

`

Опять же, функция выполняется при запуске вызова AJAX, все работает, кроме comments_template выводит '0'.

Спасибо за любую помощь!

ОБНОВЛЕНИЕ - Вся функция после определения обходного пути с использованием 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);

1 Ответ

4 голосов
/ 27 апреля 2012

comments_template работает только для постов и отдельных страниц. Чтобы это работало, вам нужно использовать $ withcomments = true, например:

global $withcomments;

$withcomments = true; 
comments_template();

У меня была похожая проблема, и я решил ее в этой записи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...