Как получить последнее сообщение с флажком CMB2 = true - PullRequest
0 голосов
/ 25 июня 2019

Я использую 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чтобы помочь понять, что происходит_

Теперь все это работает, но я чувствую, что я действительно взломал это вместе, и я обеспокоен тем, что, если сайт будет расти, я создам что-то, чтодолжен все это ползти.

Любой совет был бы очень признателен!

...