Я использую CMB2 для создания метабоксов для сайта.Одним из метабоксов является флажок «Избранные посты», который появляется только в пост-типах постов.
В нескольких шаблонах страниц я хочу иметь возможность отображать слаг, постоянную ссылку, изображение и выдержку из последнихсообщение, для которого установлен флажок «Избранные сообщения».
Это будет в дополнение к показу содержимого страницы, либо из содержимого, либо из других метабоксов, либо из обоих.
Я достиг этого, но так как я новичок в разработке WP(но не разработка CMS) Я хотел убедиться, что я не делаю что-то действительно глупое.
Я создал флажок CMB2 Featured, и я создал шаблон страницы с частью шаблона, котораяиспользует query_posts, чтобы найти все сообщения, а затем отфильтровать их по самому последнему сообщению, у которого установлен флажок Featured.
Используя CMB2, я успешно добавил флажок к своим функциям и могу сохранить его состояниев сообщении.
add_action( 'cmb2_init', 'cmb2_add_metabox_general' );
function cmb2_add_metabox_general() {
$prefix = '_cmb_';
$cmb = new_cmb2_box( array(
'id' => $prefix . 'featured_post',
'title' => __( 'Featured Post', 'cmb2' ),
'object_types' => array( 'post' ),
'context' => 'side',
'priority' => 'core',
) );
$cmb->add_field( array(
'name' => __( 'Show in featured?', 'cmb2' ),
'id' => $prefix . 'show_in_featured',
'type' => 'checkbox',
) );
}
Я успешно вытащил сообщения, отмеченные как «избранные сообщения», в часть шаблона:
<?php query_posts(array('post__in'=>get_post_meta( get_the_ID(), '_cmb_show_in_featured', true )));
$featuredCounter = 0;
while (have_posts()) : the_post();
$featured = get_post_meta( get_the_ID(), '_cmb_show_in_featured', true );
if($featured == "on"):
$featuredCounter++;
endif;
endwhile;
if($featuredCounter > 0):
?>
<section id="featuredPost" class="blog-post blog-post__featured">
<div class="blog-post__wrap">
<div class="container">
<h2>FEATURED ARTICLE</h2>
<?php
$featureCount = 0;
while (have_posts()) : the_post();
$featured = get_post_meta( get_the_ID(), '_cmb_show_in_featured', true );
if($featured=='on'):
$featureCount++;
if($featureCount == 1):?>
<div class="row">
<div class="col-12 col-md-3 col-lg-4">
<div class="blog-post__image">
<a href="<?php the_permalink(); ?>"><?php echo wp_get_attachment_image(get_post_thumbnail_id(get_the_ID()), 'featured-blog'); ?></a>
</div>
</div>
<div class="col-12 col-md-9 col-lg-8">
<div class="blog-post__content">
<article>
<header>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<div class="post-details">
<?php the_excerpt(); ?>
</div>
</header>
</article>
</div>
</div>
</div>
<?php
endif;
endif;
endwhile; ?>
</div>
</div>
</section>
<?php endif; ?>
<?php wp_reset_query(); ?>
_Note - там есть несколько счетчиков и var_dumpsчтобы помочь понять, что происходит_
Теперь все это работает, но я чувствую, что я действительно взломал это вместе, и я обеспокоен тем, что, если сайт будет расти, я создам что-то, чтодолжен все это ползти.
Любой совет был бы очень признателен!