#php #css #wordpress #advanced-custom-fields
Вопрос:
Я пытаюсь создать страницу архива для моих сообщений в блоге, которая сортируется по дате, добавляемой через поле ACF datepicker.
Это то, что у меня есть до сих пор:
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'orderby' => 'meta_value',
'order' => 'DESC',
'meta_key' => 'datum_artikel',
'meta_value' => date('Ymd',strtotime("today")),
'meta_compare' => '<='
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
echo "<div class='posts'>";
while ( $query->have_posts() ) {
$query->the_post();
$f = get_fields();
$link = ($f['bericht_doorverwijzen'] ?? '' ? $f['bericht_doorverwijzen'] : get_the_permalink());
$img_id = get_post_thumbnail_id();
$date = $f['datum_artikel'];
echo "<div class='post w-1/3'>";
echo "<div class='postWrapper'>";
if(!empty($img_id)) {
$img = Images::get_image_resized($img_id, 397, 230, true);
echo "<a href='".$link."' title='Ga naar ".get_the_title()."'>";
echo '<picture class="img">';
echo '<img src="'.$img[0].'" alt="'.get_post_meta($img_id, '_wp_attachment_image_alt', true).'"/>';
echo '</picture>';
echo "</a>";
}
echo "<div class='content'>";
echo "<h2><a href='".$link."' title='Ga naar ".get_the_title()."'>".get_the_title()."</a></h2>";
if(!empty($date)) {
echo "<p class='date'>". $date ."</p>";
}
echo the_excerpt_max_charlength($charlength = 130);
echo "</div>";
echo "</div>";
echo "</div>";
}
echo "</div>";
}
wp_reset_postdata();
Я нашел несколько примеров в Интернете, но ни один из них, похоже, не работает с моим кодом. Как я могу добавить название месяца между публикациями, когда месяц меняется, и могу ли я создать дополнительную навигацию со всеми месяцами и привязкой, чтобы она переходила к нужным публикациям?
Комментарии:
1. Глядя на
orderBy
поле выше, я вижу, что вы используетеmeta_value
его в порядке убывания. А как насчет того, чтобы переодетьсяmeta_value
datum_artikel
?2. Порядок постов таков, как мне это нужно, единственное, что я хочу, — это отображать заголовок между разными постами, когда месяц меняется между двумя постами.
3. Затем вы хотите реализовать классический контрольный разрыв . Вы просто сравниваете значение критерия (месяц, соотв. комбинация года и месяца) текущей записи с предыдущей — если они отличаются, то сначала выводится месяц, а затем выполняется вывод данных текущей записи.
4. В каком формате это
$date
происходит? Можете ли вы вставить пример?5. $дата имеет следующий формат: j F Y
Ответ №1:
Я нашел в Интернете еще один пример, который, похоже, делает то, что мне нужно:
$query = new WP_Query( array(
'post_type' => 'post',
'post_status' => 'publish',
'meta_key' => 'datum_artikel',
'orderby' => 'meta_value',
'order' => 'DESC',
) );
if ( $query->have_posts() ) {
$current_header = "";
echo "<div class='posts'>";
while ( $query->have_posts() ) {
$query->the_post();
$f = get_fields();
$date = $f['datum_artikel'];
$temp_date = get_post_meta( get_the_ID(), 'datum_artikel', true);
$pretty_month = date_i18n("F Y", strtotime($temp_date));
if ($pretty_month != $current_header) {
$current_header = $pretty_month;
echo "<h2>". $pretty_month ."</h2>";
}
$link = ($f['bericht_doorverwijzen'] ?? '' ? $f['bericht_doorverwijzen'] : get_the_permalink());
$img_id = get_post_thumbnail_id();
echo "<div class='post w-1/3'>";
echo "<div class='postWrapper'>";
if(!empty($img_id)) {
$img = Images::get_image_resized($img_id, 397, 230, true);
echo "<a href='".$link."' title='Ga naar ".get_the_title()."'>";
echo '<picture class="img">';
echo '<img src="'.$img[0].'" alt="'.get_post_meta($img_id, '_wp_attachment_image_alt', true).'"/>';
echo '</picture>';
echo "</a>";
}
echo "<div class='content'>";
echo "<h2><a href='".$link."' title='Ga naar ".get_the_title()."'>".get_the_title()."</a></h2>";
if(!empty($date)) {
echo "<p class='date'>". $date ."</p>";
}
echo the_excerpt_max_charlength($charlength = 130);
echo "<a href='".$link."' title='Ga naar ".get_the_title()."' class='link'>Lees meer</a>";
echo "</div>";
echo "</div>";
echo "</div>";
}
echo "</div>";
}
wp_reset_postdata();
Ответ №2:
$today = date("Y/m/j");
$args = (array(
'post_type' => 'post',
'posts_per_page' => -1,
'meta_key' => 'datum_artikel',
'orderby' => 'meta_value',
'order' => 'DESC',
'meta_query' => array(
array(
'key' => 'datum_artikel',
'value' => $today,
'compare' => '<=',
'type' => 'CHAR'
)
)
));
$query = new WP_Query($args);