Как получить все года постов в определенной категории

iJoGol

Творец (III)
Сообщения
17
Симпатии
6
Баллы
339
Хочу сделать вот такую штуку
Screenshot (9).png
Подскажите плиз, как получить все года постов в конкретной категории, чтобы получилось так:

Код:
<ul>
<li><a href="?year=2021">2021</a></li>
<li><a href="?year=2022">2022</a></li>
</ul>

И тоже самое для месяцев, но так чтобы скрипт понимал какой год у нас выбран и формировал ссылку:
Код:
<ul>
<li><a href="?year=2021&month=3">Март</a></li>
<li><a href="?year=2021&month=4">Апрель</a></li>
</ul>
 
Что-то типа:
PHP:
$posts = get_posts( array(
    'post_type' => 'press',
    'nopaging'  => true,
    'orderby'   => 'date',
    'order'     => 'DESC',
) );

$_year_mon = '';
$_has_grp = false;
foreach ( $posts as $post ) {
    setup_postdata( $post );

    $time = strtotime( $post->post_date );
    $year = date( 'Y', $time );
    $mon = date( 'F', $time );
    $year_mon = "$year-$mon";

    // Open a new group.
    if ( $year_mon !== $_year_mon ) {
        // Close previous group, if any.
        if ( $_has_grp ) {
            echo '</div><!-- .month -->';
            echo '</div><!-- .year -->';
        }
        $_has_grp = true;

        echo '<div class="year">';
        echo "<span>$year</span>";

        echo '<div class="month">';
        echo "<span>$mon</span>";
    }

    // Display post title.
    if ( $title = get_the_title() ) {
        echo "<div>$title</div>";
    } else {
        echo "<div>#{$post->ID}</div>";
    }

    $_year_mon = $year_mon;
}

// Close the last group, if any.
if ( $_has_grp ) {
    echo '</div><!-- .month -->';
    echo '</div><!-- .year -->';
}
 
Что-то типа:
PHP:
$posts = get_posts( array(
    'post_type' => 'press',
    'nopaging'  => true,
    'orderby'   => 'date',
    'order'     => 'DESC',
) );

$_year_mon = '';
$_has_grp = false;
foreach ( $posts as $post ) {
    setup_postdata( $post );

    $time = strtotime( $post->post_date );
    $year = date( 'Y', $time );
    $mon = date( 'F', $time );
    $year_mon = "$year-$mon";

    // Open a new group.
    if ( $year_mon !== $_year_mon ) {
        // Close previous group, if any.
        if ( $_has_grp ) {
            echo '</div><!-- .month -->';
            echo '</div><!-- .year -->';
        }
        $_has_grp = true;

        echo '<div class="year">';
        echo "<span>$year</span>";

        echo '<div class="month">';
        echo "<span>$mon</span>";
    }

    // Display post title.
    if ( $title = get_the_title() ) {
        echo "<div>$title</div>";
    } else {
        echo "<div>#{$post->ID}</div>";
    }

    $_year_mon = $year_mon;
}

// Close the last group, if any.
if ( $_has_grp ) {
    echo '</div><!-- .month -->';
    echo '</div><!-- .year -->';
}
Нет, что то типа

Код:
<?php $years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM    $wpdb->posts WHERE  post_status = 'publish' ORDER BY post_date DESC"); ?>
<?php foreach($years as $year) : ?>
  <ul style="list-style-type:none;">
  <?php $months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND YEAR(post_date) = '".$year."' ORDER BY post_date DESC"); ?>
  <?php foreach($months as $month) : ?>
  <li><a href="?y=<?php echo $year; ?>&m=<?php echo date( 'F', mktime(0, 0, 0, $month) );?>"><?php echo date( 'F', mktime(0, 0, 0, $month) );?></a></li>
<?php endforeach; ?>

Но тут проблема в том, что он мне месяца с каждого года дублирует и название месяца по Английски пишет - а нужно по русски, и в ссылку чтобы номер месяца уходил а не название
 
PHP:
<li><a href="?y=<?php echo $year; ?>&m=<?php echo date( 'F', mktime(0, 0, 0, $month) );?>"><?php echo date( 'F', mktime(0, 0, 0, $month) );?></a></li>

=>

PHP:
setlocale(LC_TIME, "de_DE");
?>
<li><a href="?y=<?php echo $year; ?>&m=<?php echo $month; ?>"><?php echo strftime( '%B', mktime(0, 0, 0, $month) );?></a></li>
 
PHP:
<li><a href="?y=<?php echo $year; ?>&m=<?php echo date( 'F', mktime(0, 0, 0, $month) );?>"><?php echo date( 'F', mktime(0, 0, 0, $month) );?></a></li>

=>

PHP:
setlocale(LC_TIME, "de_DE");
?>
<li><a href="?y=<?php echo $year; ?>&m=<?php echo $month; ?>"><?php echo strftime( '%B', mktime(0, 0, 0, $month) );?></a></li>
Код:
<?php $years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM    $wpdb->posts WHERE  post_status = 'publish' ORDER BY post_date DESC"); ?>
<?php foreach($years as $year) : ?>
  <li <?php $curr_year = date('Y'); if ($year == $_GET['y'] || $_GET['y'] == $curr_year) { ?>class="current-menu-item"<?php }else{ ?><?php }?>><a href="?y=<?php echo $year; ?>&m=<?php $curr_month = date('m'); if ( $_GET['m'] ) { ?><?php echo $_GET['m']; ?><?php }else{ ?><?php echo $curr_month; ?><?php }?>"><?php echo $year; ?></a></li>
<?php endforeach; ?>
и

Код:
<?php $months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date DESC"); ?>
<?php foreach($months as $month) : ?>
  <li><a href="?y=<?php $curr_year = date('Y'); if ( $_GET['y'] ) { ?><?php echo $_GET['y']; ?><?php }else{ ?><?php echo $curr_year; ?><?php }?>&m=<?php echo date( 'm', mktime(0, 0, 0, $month) );?>"><?php echo date_i18n( 'F', mktime(0, 0, 0, $month) );?></a></li>
<?php endforeach; ?>

Вот так правильно
 
Назад
Верх