Пользовательский цикл Wordpress не отображается в шаблоне страницы - PullRequest
0 голосов
/ 05 марта 2019

У меня есть собственный цикл 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(); ?>

Благодарим вас за помощь в этом.Спасибо!

Ответы [ 4 ]

0 голосов
/ 09 марта 2019
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(); ?>
0 голосов
/ 05 марта 2019

Вам необходимо определить $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();
0 голосов
/ 08 марта 2019

Как указано в предыдущих ответах, вы можете использовать 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

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

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

  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();
?>
0 голосов
/ 05 марта 2019

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

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

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

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