Запрашивает WordPress для разных страниц? - PullRequest
1 голос
/ 13 ноября 2010

У меня есть код WordPress, который довольно хорошо работает на фабрике. Это просто цикл, который показывает сообщения. Он будет работать как часть системы разбивки на страницы, и я предполагаю, что единственный способ сделать это - выполнить запрос, который изменится в зависимости от того, находится ли пользователь в категории или на странице поиска, чтобы пользователь получил другой набор сообщений.

if ( have_posts() ) : while ( have_posts() ) : the_post(); 
      // ....
endwhile; endif;

К сожалению, я понятия не имею, как это сделать. Я пробовал разные вещи, но ни одна из них не помогла ситуации. Кажется, я всегда получаю только все сообщения, а не те, которые я просматриваю. Я предполагаю, что я должен использовать query_posts. (

Нумерация страниц AJAX, и она отправляет две вещи в файл цикла wordpress, а именно смещение и номер страницы. Он в основном проверяет, когда пользователь прокручивает страницу вниз и загружает больше материала. Вот для справки:

<script type="text/javascript">
$(document).ready(function() {

    var number = 10;
    var offset = 0;
    var page_number = 2;
    var busy = false;

    /* Bind the scroll function to an event */
    $(window).bind('scroll', function(e) {


        /* If the scroll height plus the window height is more than the document height minus 10, continue */
        if($(window).scrollTop() + $(window).height() > $(document).height() - 10 && !busy) {


            busy = true;    

            /* Quick message so you know more stuff is loading */
            $('.loading-more').html('Click to load more posts..');

            $.post('<?php bloginfo('siteurl') ?>/wp-admin/admin-ajax.php', {
                action: 'and_action',
                off: offset+number,
                pagenumber: page_number - 1
                }, function(data) {


                    offset = offset+number; 

                    $('.empty-div').append('<div class="pages"><p>Welcome to <strong>Page '+page_number+'</strong></p></div><hr />'+data);


                    busy = false;
                    page_number += 1;


            });


        }

    });


    $('.loading-more').bind('click', function(e) {

            busy = true;    

            $('.loading-more').html('<em>Loading more posts..</em>')

            /* Quick message so you know more stuff is loading */               
            $.post('<?php bloginfo('siteurl') ?>/wp-admin/admin-ajax.php', {
                action: 'and_action',
                off: offset+number,
                data: data,
                pagenumber: page_number - 1
                }, function(data) {


                    offset = offset+number; 

                    $('.empty-div').append('<div class="pages"><p>Welcome to <strong>Page '+page_number+'</strong></p></div><hr />'+data);


                    busy = false;
                    page_number += 1;

                    $('.loading-more').html('Click to load more posts..');

            });


    });


});
</script>

Я связал с ним событие щелчка тоже только для резервного копирования. Любая помощь очень ценится:)


Обновление

вот PHP, который я использую в functions.php

add_action('wp_ajax_and_action', 'get_posts_page');
add_action('wp_ajax_nopriv_and_action', 'get_posts_page');

function and_action() {
    $query_string = $_POST['query_string'];
}

function get_posts_page() {

    global $wpdb;

    query_posts($query_string . '&posts_per_page=10&post_status=publish&offset='.$_POST['off']);

    if ( have_posts() ) : while ( have_posts() ) : the_post(); 


        ?>
        <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <h1 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h1>
            <div class="entry-meta">

                <span class="%1$s">Posted on</span> <?php the_date('F jS'); ?>
                - <a class="comment-link" href="<?php the_permalink(); ?>#comment"><?php comments_number('Leave a Response!', '1 Response', '% Responses'); ?></a>
            </div><!-- .entry-meta -->
            <br />
            <a class="post-thumbnail-thing" href="<?php the_permalink(); ?>"><?php echo get_the_post_thumbnail(); ?></a>            
            <div class="entry-content">
                <?php the_content( __( '<span class="alignright">
                <span class="button-css">Continue Reading &rarr;</span> 
                 </span>', 'twentyten' ) ); ?><br /><hr />
                <?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Pages:', 'twentyten' ), 'after' => '</div>' ) ); ?>
            </div><!-- .entry-content -->
        </div><!-- #post-## -->

        <?php comments_template( '', true ); ?>

<?php       
    endwhile; endif;

    wp_reset_query();

    die();

}

1 Ответ

2 голосов
/ 15 ноября 2010

При использовании query_posts на странице категории или поиска необходимо убедиться, что вы включили переменную $query_string.Переменная $query_string содержит такую ​​информацию, как, в какой категории вы находитесь и каков был поисковый термин.

<?php query_posts($query_string . '&posts_per_page=10') ?>

Обновление

Что ж, похоже, ваш javascriptработает из нижнего колонтитула вашей страницы.Таким образом, вы можете добавить переменную $query_string в качестве параметра записи.

footer.php

<?php global $query_string; ?>

... 

$.post('<?php bloginfo('siteurl') ?>/wp-admin/admin-ajax.php', {
    action: 'and_action',
    off: offset+number,
    pagenumber: page_number - 1,

    query_string: '<?php echo $query_string ?>'
    }

functions.php

function and_action() {
    $query_string = $_POST['query_string'];
}

Update # 2

Ваш файл functions.php должен начинаться следующим образом.И вам не нужно глобализировать $query_string в нижнем колонтитуле.Причина, по которой вы делаете это в header.php, заключается в том, что header.php запускается внутри функции get_header()

add_action('wp_ajax_and_action', 'get_posts_page');
add_action('wp_ajax_nopriv_and_action', 'get_posts_page');

function get_posts_page() {

    $query_string = $_POST['query_string'];

    global $wpdb;

    query_posts($query_string . '&posts_per_page=10&post_status=publish&offset='.$_POST['off']);

    if ( have_posts() ) : while ( have_posts() ) : the_post();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...