Пользовательский цикл Wordpress не отображается в шаблоне страницы - программирование
Подтвердить что ты не робот

Пользовательский цикл Wordpress не отображается в шаблоне страницы

У меня есть собственный цикл Wordpress в моем файле индекса, который в настоящее время не работает. Цель этого пользовательского цикла WP состоит в том, чтобы назначать различные классы и структуру на основе номера поста.

Приведенный ниже код прекрасно работает в файле index.php, НО, к сожалению, он не работает при копировании его в пользовательский шаблон страницы.

<?php
/**
* Template Name: custom page template
*/
get_header(); ?>

<?php if (have_posts()) : ?>
<?php $count = 0; ?>
<?php while (have_posts()) : the_post(); ?>
<?php $count++; ?>
<?php if ($count == 1) : ?>

<div class="item1">
<span>hello!</span<?php the_title(); ?>>
</div><!-- .item# --> 

<?php elseif ($count == 2) : ?>      

<div class="item2">
<?php the_title(); ?><span>Hi!</span
</div><!-- .item# --> 

<?php elseif ($count == 3) : ?>      

<div class="item3">
<!-- Put Your Stuff Here -->
</div><!-- .item# --> 

<?php elseif ($count == 4) : ?>      

<div class="item4">
<!-- Put Your Stuff Here -->
</div><!-- .item# --> 

<?php elseif ($count == 5) : ?>      

<div class="item5">
<!-- Put Your Stuff Here -->
</div><!-- .item# -->

<?php else : ?>

<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>

Цель:

Я пытаюсь создать собственную страницу (скажем, www.mywebsite.com/my-custom-page), в которой перечислены все статьи.

Как упоминалось выше, пользовательский цикл не отображается на странице, а также нумерованной нумерации страниц. Как будто шаблон страницы не распознается или игнорирует коды пользовательских циклов.

Я пытался использовать WP Query, но все равно не повезло. Приведенный ниже код возвращает "Извините, нет записей, соответствующих вашим критериям".

Частично рабочий код запроса WP

Здесь мой сайт, где этот код появится, но, кажется, не работает

<?php
/**
* Template Name: Custom Page - Blog
*/
get_header(); ?>


<!-- START of WP Query -->

<?php $the_query = new WP_Query( array("post_type"=>'post')); ?>

<?php if ( $the_query->have_posts() ) : ?>

<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>

<?php $count++; ?>

    <?php if ($count == 1) : ?>
    <div class="item1">
        <span>Post 1</span><?php the_title(); ?>
    </div><!-- .item# --> 

    <?php elseif ($count == 2) : ?>      
    <div class="item2">
    <span>Post 2</span><?php the_title(); ?>
    </div><!-- .item# --> 

    <?php elseif ($count == 3) : ?>      
    <div class="item3">
        <span>Post 3</span><?php the_title(); ?>
    </div><!-- .item# --> 

    <?php elseif ($count == 4) : ?>      
    <div class="item4">
        <span>Post 4</span><?php the_title(); ?>
    </div><!-- .item# --> 

    <?php elseif ($count == 5) : ?>      
    <div class="item5">
        <span>Post 5</span><?php the_title(); ?>
    </div><!-- .item# -->

    <?php elseif ($count >= 5 || $count <= 7) : ?>      
    <div class="item6">
        <span>Post 6 to 7</span><?php the_title(); ?>
    </div><!-- .item# -->

    <?php elseif ($count >= 8 || $count <= 15) : ?>      
    <div class="item6">
        <span>Post 8 onwards - </span><?php the_title(); ?><?php the_excerpt(); ?>
    </div><!-- .item# -->

    <?php elseif ($count >= 16) : ?>      
    <div class="item6">
        <span>Post 8 onwards - </span><?php the_title(); ?><?php the_excerpt(); ?>
    </div><!-- .item# -->
    <?php
    global $wp_query;

        $big = 999999999; // need an unlikely integer

        echo paginate_links( array(
        'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format' => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total' => $wp_query->max_num_pages
        ) );
    ?>


<?php else : ?>

<?php endif; ?>
<?php endwhile; ?>
<?php else : ?>
<p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

<!-- END of WP Query -->


<?php get_footer(); ?>

    </article>

<?php get_footer(); ?>

Ценю вашу помощь в этом. Спасибо!

4b9b3361

Ответ 1

Как указывалось в предыдущих ответах, вы можете использовать WP_Query для создания пользовательского запроса для сообщений, пользовательских типов сообщений (CPT) и страниц:

$the_query = new WP_Query( array(
    'post_type'      => 'post',
    'posts_per_page' => 10,
    // other args here
) );

И используйте Цикл для отображения сообщений:

if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        //
        // Post Content here
        //
    } // end while
} // end if

Теперь ссылаясь на это:

Частично рабочий код запроса WP

Здесь мой сайт, где этот код появится, но, кажется, не работает

Я думаю, что вы хотели сказать, "нумерация страниц не работает", верно? Потому что это не

  1. Потому что вы используете глобальный объект $wp_query со своей нумерацией страниц.

  2. В своей конструкции WP_Query вы не установили параметр paged, необходимый для правильной работы нумерации страниц.

Итак, вот как это должно быть:

$current_page = max( 1, get_query_var( 'paged' ) ); // the current page
$the_query = new WP_Query( array(
    'post_type'      => 'post',
    'posts_per_page' => 10,
    'paged'          => $current_page,
    // other args here
) );

А затем используйте $current_page с paginate_links() - вы также можете видеть здесь, я использовал $the_query а не $wp_query при получении/указании максимального количества страниц:

echo paginate_links( array(
    'current'  => $current_page,
    'total'    => $the_query->max_num_pages, // here I don't use $wp_query
    // other args here
) );

Ниже приведен рабочий код, который вы можете использовать вместо своего частично рабочего кода (код между <!-- START of WP Query --> и <!-- END of WP Query -->):

<?php
$current_page = max( 1, get_query_var( 'paged' ) );
$the_query = new WP_Query( array(
    'post_type'      => 'post',
    'posts_per_page' => 10,
    'paged'          => $current_page,
    // other args here
) );

if ( $the_query->have_posts() ) :
    $count = 1;
    while ( $the_query->have_posts() ) : $the_query->the_post();
        if ( 1 === $count ) :
        ?>
        <div class="item item1" style="background: red; color: #fff;">
            <span>Post 1</span> <?php the_title( '<h3>', '</h3>' ); ?>
        </div>
        <?php
        elseif ( 2 === $count ) :
        ?>
        <div class="item item2" style="background: orange; color: #fff;">
            <span>Post 2</span> <?php the_title( '<h3>', '</h3>' ); ?>
        </div>
        <?php
        // other conditions here
        else :
        ?>
        <div class="item item3" style="background: yellow; color: #666;">
            <span>Post <?php echo $count; ?></span>
            <?php the_title( '<h3>', '</h3>' ); ?>
        </div>
        <?php
        endif;
        $count++;
    endwhile;
?>
<p>Pagination:</p>
<?php
    $big = 999999999; // need an unlikely integer
    echo paginate_links( array(
        'base'     => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format'   => '?paged=%#%',
        'current'  => $current_page,
        'total'    => $the_query->max_num_pages,
        'type'     => 'list',
        'end_size' => 3,
    ) );
?>
<?php else : ?>
    <p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif;

wp_reset_postdata();
?>

Ответ 2

Я не знаю, что вы подразумеваете под "пользовательским циклом WordPress", но код работает для того, что WordPress уже запрашивал для сообщений, и, соответственно, на вашей пользовательской странице этого не делается! Так что have_posts() возвращает false. Чтобы запросить "вручную" для всех сообщений, вам необходимо сделать следующее:

$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {

а остальное идет от <?php $count = 0;?> <?php $count = 0;?> вкл. для получения дополнительной информации о WP_Query см. следующий WP_Query

Ответ 3

Вам нужно определить $args. Вы можете найти список предметов, которые вы можете использовать в WP_Query здесь https://www.billerickson.net/code/wp_query-arguments/

Увидеть ниже:

// WP_Query arguments
$args = array(
    'post_type'              => array( 'post' ),
);

// The Query
$query = new WP_Query( $args );

// The Loop
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // do something
    }
} else {
    // no posts found
}

// Restore original Post Data
wp_reset_postdata();

Ответ 4

Please try this one   

  <?php
    /**
     * Template Name: Custom Page - Blog
     */
    ?>

    <?php get_header(); ?>
    <!-- START of WP Query -->
    <?php
    $post_per_page = 10;
    $paged = !empty(get_query_var('paged')) ? get_query_var('paged') : 1;
    $the_query = new WP_Query(array("post_type" => 'post', 'posts_per_page' => $post_per_page));
    $count = ( $paged * $post_per_page ) - ($post_per_page - 1);
    ?>

    <?php if ($the_query->have_posts()) : ?>

        <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>

            <div class="item<?php echo $count ?>">
                <span>Post <?php echo $count ?> </span><?php the_title(); ?>
            </div><!-- .item# -->

            <?php $count++; ?>

        <?php endwhile; ?>

        <?php
        $big = 999999999; // need an unlikely integer

        echo paginate_links(array(
            'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
            'format' => '?paged=%#%',
            'current' => max(1, get_query_var('paged')),
            'total' => $the_query->max_num_pages
        ));
        ?>

    <?php else : ?>
        <p><?php esc_html_e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>
    <!-- END of WP Query -->

    <?php get_footer(); ?>