Вывод новостей, пагинация

Доброго времени суток.
такая проблема.

назначил статическую страницу новостей(вывод записей).

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

Вопрос: как сделать в данном случае, что бы выводились записи определенной категории, а не все.

и еще внизу у меня вместо пагинации "предыдущие записи", "следующие записи", как изменить это на пагинацию из цифр?

скачивал шаблон темы на underscores.me/

Для пагинации использую такой код:


$args = array(
    'screen_reader_text' => ' ',
    'show_all'           => false,
    'prev_next'          => true,
    'prev_text'          => __('←'),
    'next_text'          => __('→'),
    'type'               => 'plain',
    'add_args'           => false,
    'add_fragment'       => '',
    'end_size'     => 1,
    'mid_size'     => 2,
);

$pagination = get_the_posts_pagination($args);

if( !empty($pagination) ) {
    echo $pagination;
}

Для вывода записе по категориям используется файл archive.php, а не index.php (этот используется для вывода всех постов).

Просто зайдите в адмминке в категории записей и под каждой записью будет ссылка на вывод пjстов категории

http://wpdemo.webcodin.com/wp-content/uploads/2016/01/screenshot-7.png
На скрине выше список категорий справа. При наведении на каждую из них будут появляться ссылки на редактирование и просмотр категорий

Для пагинации использую такой код:

$args = array(
    'screen_reader_text' => ' ',
    'show_all'           => false,
    'prev_next'          => true,
    'prev_text'          => __('←'),
    'next_text'          => __('→'),
    'type'               => 'plain',
    'add_args'           => false,
    'add_fragment'       => '',
    'end_size'     => 1,
    'mid_size'     => 2,
);

$pagination = get_the_posts_pagination($args);

if( !empty($pagination) ) {
    echo $pagination;
}

Пагинация появилась, но, на следующую страницу не идет, урл адрес меняется, а контент остается тот же что и на 1 странице

.htaccess родной? какие настройки ссылок ( с этой страницы админки /wp-admin/options-permalink.php)?

.htaccess родной? какие настройки ссылок ( с этой страницы админки /wp-admin/options-permalink.php)?

сейчас такие – => Название записи: http://www.4genergy.ru/sample-post/

.htaccess в нем не шарю, но вроде родной, установил ВП и не трогал

.htaccess родной? какие настройки ссылок ( с этой страницы админки /wp-admin/options-permalink.php)?

в корне сайта нашел файл такой, вот что там;


# BEGIN WordPress
# Строки между `BEGIN WordPress` и `END WordPress` были созданы автоматически.
# Они могут быть изменены только фильтрами WordPress.
# Все изменения между этими отметками будут перезаписаны.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Проблема с пагинацией сразу отсылает к htaccess и настройкам ссылок. Попробуйте настройки ссылок изменить и вернуть в текущее состояние, возможно поможет.

Это при условии, что какой-то сторонний код не врияет на рерайты. У вас точно голая тема валит проблемы с пагинацией или уже после добавления кастомного кода?

Проблема с пагинацией сразу отсылает к htaccess и настройкам ссылок. Попробуйте настройки ссылок изменить и вернуть в текущее состояние, возможно поможет.

Это при условии, что какой-то сторонний код не врияет на рерайты. У вас точно голая тема валит проблемы с пагинацией или уже после добавления кастомного кода?

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

где вообще находится шаблон этого всего? нигде не могу найти, такие слова русские в кодах

По переводам и не получится найти. Там используется функции для вывода переводов, одна из них:


__( string $text, string $domain = 'default' )

В жизни выглядит как-то так так:


__( 'Ready to publish your first post? <a href="%1$s">Get started here</a>.', 'storefront' )

Вообще за вывод ленты постов с пагинацией отвечают 2 файла:
– index.php
– archive.php

В них будет код того как формируется страница.

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

По переводам и не получится найти. Там используется функции для вывода переводов, одна из них:

__( string $text, string $domain = 'default' )

В жизни выглядит как-то так так:


__( 'Ready to publish your first post? <a href="%1$s">Get started here</a>.', 'storefront' )

Вообще за вывод ленты постов с пагинацией отвечают 2 файла:
- index.php
- archive.php

В них будет код того как формируется страница.

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

а если и индекс и архив у меня пустые файлы?

А как у вас происходит вывод, через кастомную страицу? Вордпрессу же, всё равно, надо влезть в loop, чтоб сделать вывод всех постов в ленту. Т. е. он это где-то делает

А как у вас происходит вывод, через кастомную страицу? Вордпрессу же, всё равно, надо влезть в loop, чтоб сделать вывод всех постов в ленту. Т. е. он это где-то делает

сейчас попробую скинуть код.
первый раз с вордпресс работаю)

И вообще, я правильно понял задачу? Чтоб по урлу /news/ выводились новости?

И вообще, я правильно понял задачу? Чтоб по урлу /news/ выводились новости?

просто что бы пагинация работала 😀 уже неделю мучаюсь.

[img=PunBB bbcode test]http://www.4genergy.ru/dffsdf.JPG[/img]

это страница на которой надо вывести

И вообще, я правильно понял задачу? Чтоб по урлу /news/ выводились новости?

http://www.4genergy.ru/news/

это вот то что получилось

Ну вообще немного не правильной дорожкой пошли 🙂

Для этого надо добавить кастомный тип записи, например news:

1.Ставим плагин CPT UI – https://wordpress.org/plugins/custom-post-type-ui/. Активируем, в общем, всё как обычно
2. Добавляем кастомный тип записи news
3. При добавлении типа записи в настройках плагина надо найти поле "Has Archive" (как на русском оно обзывается я не знаю) и установить его в True
4. В меню навигации появится новый тип записей, отображается точно так же как и Записи, но только с названием, которое вы ему дадите. Все новости перенести туда
5. archive.php с таким кодом:


<?php
get_header();

if( is_archive() ) {

    if( is_category() || is_tag() || is_tax() ) {
        $current = $wp_query->get_queried_object();
        $curr_taxonomy = get_taxonomy($current->taxonomy);
        ?>
        <h1><?php echo $current->name; ?></h1>
        <?php
        if( ! empty($curr_taxonomy->description) ) {
            echo wpautop($curr_taxonomy->description);
        }
    }
    elseif( is_post_type_archive() ) {
        $current = $wp_query->get_queried_object();
        ?>
        <h1><?php echo $current->label ?></h1>
        <?php
        if( is_post_type_archive() ) {
            $post_type_description = cpt_description($wp_query->query['post_type']);
            if( ! empty($post_type_description) ) {
                echo wpautop($post_type_description);
            }
        }
    }
    elseif( is_author() ) {
        $current = $wp_query->get_queried_object();
        $author = get_user_by( 'slug', get_query_var( 'author_name' ) );
        $author_meta = get_user_meta($author->ID);
        ?>
        <h1><?php echo $current->data->display_name ?></h1>
        <?php
        if( ! empty($author_meta['description'][0]) ) {
            ?>
            <div>
                <?php echo wpautop($author_meta['description'][0]); ?>
            </div>
            <?php
        }
    }

}
?>

<?php
if( is_search() ) {
    ?>
    <h1><?php printf( 'Результаты поиска по&nbsp;запросу&nbsp;&mdash; "%s"', get_search_query() ); ?></h1>
    <?php
}
?>

<?php
if( have_posts() ) {
    while ( have_posts() ) :
        the_post();
        $image = get_the_post_thumbnail( $post->ID, 'medium' );
        ?>
        <div>

            <?php
            if( $image ) {
                ?>
                <a href="<?php echo get_permalink($post->ID); ?>">
                    <?php echo $image; ?>
                </a>
                <?php
            }
            ?>

            <p><a href="<?php echo get_permalink($post->ID); ?>"><?php echo get_the_title($post->ID); ?></a></p>
        </div>
    <?php
    endwhile;
    ?>

    <?php
    $args = array(
        'base'               => '%_%',
        'format'             => '?paged=%#%',
        'show_all'           => false,
        'prev_next'          => true,
        'prev_text'          => '',
        'next_text'          => '',
        'screen_reader_text' => '&nbsp;',
        'type'               => 'plain',
        'add_args'           => false,
        'add_fragment'       => '',
        'before_page_number' => '',
        'after_page_number'  => '',
        'end_size'     => 1,
        'mid_size'     => 2,
    );
    $pagination = get_the_posts_pagination($args);
    if( !empty($pagination) ) {
        ?>
        <?php
        echo $pagination;
        ?>
        <?php
    }
}
else {
    ?>
    <p>
        Записей нет
    </p>
    <?php
}

get_footer();

Там где надо будет поправьте HTML под себя 🙂

Я там пару опечаток нашел, замените код, я вычистил всё лишнее

Там где надо будет поправьте HTML под себя :-)

а как установить это страницей для новостей?
установить архив как кастомку?

Опять провтыкал, вечер, чо 🙂 Надо удалить страницу, которая у вас сейчас news

И зайти в настрйоки ссылок, измеить текущие настройки, нажать сохранить, а после этого вернуться настройки к текущим

И зайти в настрйоки ссылок, измеить текущие настройки, нажать сохранить, а после этого вернуться настройки к текущим

Fatal error: Uncaught Error: Call to undefined function cpt_description() in /var/www/u0863422/data/www/4genergy.ru/wp-content/themes/gservice/archive.php:22 Stack trace: #0 /var/www/u0863422/data/www/4genergy.ru/wp-includes/template-loader.php(98): include() #1 /var/www/u0863422/data/www/4genergy.ru/wp-blog-header.php(19): require_once(‘/var/www/u08634…’) #2 /var/www/u0863422/data/www/4genergy.ru/index.php(17): require(‘/var/www/u08634…’) #3 {main} thrown in /var/www/u0863422/data/www/4genergy.ru/wp-content/themes/gservice/archive.php on line 22

Обновите archive.php


<?php
get_header();

if( is_archive() ) {

    if( is_category() || is_tag() || is_tax() ) {
        $current = $wp_query->get_queried_object();
        $curr_taxonomy = get_taxonomy($current->taxonomy);
        ?>
        <h1><?php echo $current->name; ?></h1>
        <?php
        if( ! empty($curr_taxonomy->description) ) {
            echo wpautop($curr_taxonomy->description);
        }
    }
    elseif( is_post_type_archive() ) {
        $current = $wp_query->get_queried_object();
        ?>
        <h1><?php echo $current->label ?></h1>
        <?php
    }
    elseif( is_author() ) {
        $current = $wp_query->get_queried_object();
        $author = get_user_by( 'slug', get_query_var( 'author_name' ) );
        $author_meta = get_user_meta($author->ID);
        ?>
        <h1><?php echo $current->data->display_name ?></h1>
        <?php
        if( ! empty($author_meta['description'][0]) ) {
            ?>
            <div>
                <?php echo wpautop($author_meta['description'][0]); ?>
            </div>
            <?php
        }
    }

}
?>

<?php
if( is_search() ) {
    ?>
    <h1><?php printf( 'Результаты поиска по&nbsp;запросу&nbsp;&mdash; "%s"', get_search_query() ); ?></h1>
    <?php
}
?>

<?php
if( have_posts() ) {
    while ( have_posts() ) :
        the_post();
        $image = get_the_post_thumbnail( $post->ID, 'medium' );
        ?>
        <div>

            <?php
            if( $image ) {
                ?>
                <a href="<?php echo get_permalink($post->ID); ?>">
                    <?php echo $image; ?>
                </a>
                <?php
            }
            ?>

            <p><a href="<?php echo get_permalink($post->ID); ?>"><?php echo get_the_title($post->ID); ?></a></p>
        </div>
    <?php
    endwhile;
    ?>

    <?php
    $args = array(
        'base'               => '%_%',
        'format'             => '?paged=%#%',
        'show_all'           => false,
        'prev_next'          => true,
        'prev_text'          => '',
        'next_text'          => '',
        'screen_reader_text' => '&nbsp;',
        'type'               => 'plain',
        'add_args'           => false,
        'add_fragment'       => '',
        'before_page_number' => '',
        'after_page_number'  => '',
        'end_size'     => 1,
        'mid_size'     => 2,
    );
    $pagination = get_the_posts_pagination($args);
    if( !empty($pagination) ) {
        ?>
        <?php
        echo $pagination;
        ?>
        <?php
    }
}
else {
    ?>
    <p>
        Записей нет
    </p>
    <?php
}

get_footer();
Обновите archive.php

<?php
get_header();

if( is_archive() ) {

    if( is_category() || is_tag() || is_tax() ) {
        $current = $wp_query->get_queried_object();
        $curr_taxonomy = get_taxonomy($current->taxonomy);
        ?>
        <h1><?php echo $current->name; ?></h1>
        <?php
        if( ! empty($curr_taxonomy->description) ) {
            echo wpautop($curr_taxonomy->description);
        }
    }
    elseif( is_post_type_archive() ) {
        $current = $wp_query->get_queried_object();
        ?>
        <h1><?php echo $current->label ?></h1>
        <?php
    }
    elseif( is_author() ) {
        $current = $wp_query->get_queried_object();
        $author = get_user_by( 'slug', get_query_var( 'author_name' ) );
        $author_meta = get_user_meta($author->ID);
        ?>
        <h1><?php echo $current->data->display_name ?></h1>
        <?php
        if( ! empty($author_meta['description'][0]) ) {
            ?>
            <div>
                <?php echo wpautop($author_meta['description'][0]); ?>
            </div>
            <?php
        }
    }

}
?>

<?php
if( is_search() ) {
    ?>
    <h1><?php printf( 'Результаты поиска по&nbsp;запросу&nbsp;&mdash; "%s"', get_search_query() ); ?></h1>
    <?php
}
?>

<?php
if( have_posts() ) {
    while ( have_posts() ) :
        the_post();
        $image = get_the_post_thumbnail( $post->ID, 'medium' );
        ?>
        <div>

            <?php
            if( $image ) {
                ?>
                <a href="<?php echo get_permalink($post->ID); ?>">
                    <?php echo $image; ?>
                </a>
                <?php
            }
            ?>

            <p><a href="<?php echo get_permalink($post->ID); ?>"><?php echo get_the_title($post->ID); ?></a></p>
        </div>
    <?php
    endwhile;
    ?>

    <?php
    $args = array(
        'base'               => '%_%',
        'format'             => '?paged=%#%',
        'show_all'           => false,
        'prev_next'          => true,
        'prev_text'          => '',
        'next_text'          => '',
        'screen_reader_text' => '&nbsp;',
        'type'               => 'plain',
        'add_args'           => false,
        'add_fragment'       => '',
        'before_page_number' => '',
        'after_page_number'  => '',
        'end_size'     => 1,
        'mid_size'     => 2,
    );
    $pagination = get_the_posts_pagination($args);
    if( !empty($pagination) ) {
        ?>
        <?php
        echo $pagination;
        ?>
        <?php
    }
}
else {
    ?>
    <p>
        Записей нет
    </p>
    <?php
}

get_footer();

кажется что то работает, сейчас гляну)

Обновите archive.php

<?php
get_header();

if( is_archive() ) {

    if( is_category() || is_tag() || is_tax() ) {
        $current = $wp_query->get_queried_object();
        $curr_taxonomy = get_taxonomy($current->taxonomy);
        ?>
        <h1><?php echo $current->name; ?></h1>
        <?php
        if( ! empty($curr_taxonomy->description) ) {
            echo wpautop($curr_taxonomy->description);
        }
    }
    elseif( is_post_type_archive() ) {
        $current = $wp_query->get_queried_object();
        ?>
        <h1><?php echo $current->label ?></h1>
        <?php
    }
    elseif( is_author() ) {
        $current = $wp_query->get_queried_object();
        $author = get_user_by( 'slug', get_query_var( 'author_name' ) );
        $author_meta = get_user_meta($author->ID);
        ?>
        <h1><?php echo $current->data->display_name ?></h1>
        <?php
        if( ! empty($author_meta['description'][0]) ) {
            ?>
            <div>
                <?php echo wpautop($author_meta['description'][0]); ?>
            </div>
            <?php
        }
    }

}
?>

<?php
if( is_search() ) {
    ?>
    <h1><?php printf( 'Результаты поиска по&nbsp;запросу&nbsp;&mdash; "%s"', get_search_query() ); ?></h1>
    <?php
}
?>

<?php
if( have_posts() ) {
    while ( have_posts() ) :
        the_post();
        $image = get_the_post_thumbnail( $post->ID, 'medium' );
        ?>
        <div>

            <?php
            if( $image ) {
                ?>
                <a href="<?php echo get_permalink($post->ID); ?>">
                    <?php echo $image; ?>
                </a>
                <?php
            }
            ?>

            <p><a href="<?php echo get_permalink($post->ID); ?>"><?php echo get_the_title($post->ID); ?></a></p>
        </div>
    <?php
    endwhile;
    ?>

    <?php
    $args = array(
        'base'               => '%_%',
        'format'             => '?paged=%#%',
        'show_all'           => false,
        'prev_next'          => true,
        'prev_text'          => '',
        'next_text'          => '',
        'screen_reader_text' => '&nbsp;',
        'type'               => 'plain',
        'add_args'           => false,
        'add_fragment'       => '',
        'before_page_number' => '',
        'after_page_number'  => '',
        'end_size'     => 1,
        'mid_size'     => 2,
    );
    $pagination = get_the_posts_pagination($args);
    if( !empty($pagination) ) {
        ?>
        <?php
        echo $pagination;
        ?>
        <?php
    }
}
else {
    ?>
    <p>
        Записей нет
    </p>
    <?php
}

get_footer();

Работет вроде как, но, когда перешел на 2 страницу, на первую нельзя вернуться, снова прогружается вторая

в этом месте попробуйте так:


    <?php
    $args = array(
        'prev_text'          => '',
        'next_text'          => '',
        'screen_reader_text' => '&nbsp;',
    );
    $pagination = get_the_posts_pagination($args);
    if( !empty($pagination) ) {
        ?>
        <?php
        echo $pagination;
        ?>
        <?php
    }
в этом месте попробуйте так:

    <?php
    $args = array(
        'prev_text'          => '',
        'next_text'          => '',
        'screen_reader_text' => '&nbsp;',
    );
    $pagination = get_the_posts_pagination($args);
    if( !empty($pagination) ) {
        ?>
        <?php
        echo $pagination;
        ?>
        <?php
    }

работает 😀 спасибо.

а теперь такой вопрос, что бы в новостях можно было перейти к след новости или к предыдущей, а то у меня почему то мое пропало 😀

Это уже со страницы самой новости?

Это уже со страницы самой новости?

Это уже на сингл, когда отдельная Запись взята, как сделать что бы можно было сразу на другую переключиться, не выходя обратно на общую ?

А у вас шаблон для внутренней из underscores.me или тот, что был до этой темы?

А у вас шаблон для внутренней из underscores.me или тот, что был до этой темы?

скачал с underscores.me и переделал под себя

Самое простое решение – взять из темы, где у вас правильно работал вывод предыдущий/следующий пост и скопировать в новую тему. Если не вариант, то вот 2 функции в ВП, которые делают это:


get_previous_post();
/*
Читать как работает тут:
https://wp-kama.ru/function/get_previous_post
*/


get_previous_post();
/*
Читать как работает тут:
https://wp-kama.ru/function/get_next_post
*/

Там же на каме будут примеры как эти функции использовать.

Самое простое решение - взять из темы, где у вас правильно работал вывод предыдущий/следующий пост и скопировать в новую тему. Если не вариант, то вот 2 функции в ВП, которые делают это:

get_previous_post();
/*
Читать как работает тут:
https://wp-kama.ru/function/get_previous_post
*/


get_previous_post();
/*
Читать как работает тут:
https://wp-kama.ru/function/get_next_post
*/

так вроде как шаблон записи самой не менялся, мы только вывод новостей поменяли, но! у меня выводилось по категории из рубрики, и так как мы применяем какой то новый тип, но обращение идет в никуда по сути. выводились сделующая запись и предыдущая из определенной категории.

использовал:

 get_adjacent_post

Укажите правильнно парамерты вашей функции, ИД категорий и т. д.

$in_same_term (логический)
Должен ли пост находиться в той же рубрике. true – получать посты из той же рубрики.
По умолчанию: false

$excluded_terms (строка)
Из каких категорий посты получать не нужно. Указываем ID категорий, через запятую.
По умолчанию: ”

$previous (логический)
true – получать предыдущий пост. false – получать следующий пост.
По умолчанию: true

$taxonomy (строка)
Название таксономии в которой нужно искать пред./след. запись, когда включен параметр $in_same_term.
По умолчанию: ‘category’


get_adjacent_post( $in_same_term, $excluded_terms, $previous, $taxonomy );

get_adjacent_post( $in_same_term, $excluded_terms, $previous, $taxonomy );

<?php 
$prev_post = get_previous_post();
$next_post = get_next_post();
if( ! empty($prev_post) ){
    ?>
    <a href="<?php echo get_permalink( $prev_post ); ?>">Предыдущая запись</a>
    <?php
}


if( ! empty($next_post) ){
    ?>
    <a href="<?php echo get_permalink( $next_post ); ?>">Следующая запись</a>
    <?php
}

?>

вроде как так заработало, понасоздаю сейчас новостей гляну)

Anonymous
Отправить
Ответ на: