Làm thế nào để thiết lập bài viết nổi bật bằng cách sử dụng hộp kiểm trong màn hình chỉnh sửa bài?


7

Tôi muốn thực hiện việc chọn một bài đăng nổi bật chỉ bằng cách chọn một hộp kiểm trong màn hình chỉnh sửa VÀ có thể truy xuất các bài viết nổi bật này từ danh mục cụ thể không?

trong ngắn hạn những gì tôi đang tìm kiếm:

  • thiết lập bài đặc trưng

  • vòng lặp ném bài viết nổi bật trong một thể loại cụ thể (không phải tất cả các bài viết)

Có ai giúp đỡ không? và cảm ơn trước :)

Câu trả lời:


10

Bạn có thể làm điều này bằng cách làm theo các bước sau:

  1. Thêm một hộp meta tùy chỉnh vào bài viết của bạn
  2. Tạo một hàm để lưu dữ liệu meta bằng hành động save_post
  3. Thêm đối số truy vấn 'meta_key' vào bất kỳ truy vấn nào bạn đang sử dụng.

Đặt cái này trong tập tin tests.php của chủ đề:

function register_post_assets(){
    add_meta_box('featured-post', __('Featured Post'), 'add_featured_meta_box', 'post', 'advanced', 'high');
}
add_action('admin_init', 'register_post_assets', 1);

function add_featured_meta_box($post){
    $featured = get_post_meta($post->ID, '_featured-post', true);
    echo "<label for='_featured-post'>".__('Feature this post?', 'foobar')."</label>";
    echo "<input type='checkbox' name='_featured-post' id='featured-post' value='1' ".checked(1, $featured)." />";
}

function save_featured_meta($post_id){
    // Do validation here for post_type, nonces, autosave, etc...
    if (isset($_REQUEST['_featured-post']))
        update_post_meta(esc_attr($post_id, '_featured-post', esc_attr($_REQUEST['_featured-post']))); 
        // I like using _ before my custom fields, so they are only editable within my form rather than the normal custom fields UI
}
add_action('save_post', 'save_featured_meta');

Sau đó, trong tệp mẫu của bạn sử dụng như sau cho vòng lặp chính:

    $args = array(
        'meta_key' => '_featured-post', // include underscore prefix in key name
        'meta_value' => 1
    );
    // The number of posts displayed would be determined under Settings->Reading
    query_posts($args);

    if(have_posts()): while(have_posts()): the_post();
        // Do your bidding here

    endwhile; else:

    endif;

CHỈ DÀNH CHO MỤC ĐÍCH VÍ DỤ: Đối với các vòng lặp tùy chỉnh (Nếu chạy nhiều vòng trên một trang), bạn sẽ sử dụng điều này:

    $args = array(
        'posts_per_page' => 5,
        'meta_key' => '_featured-post',
        'meta_value' => 1
    );

    $featured = new WP_Query($args);

    if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post();
        the_title();
        the_content();
    endwhile; else:

    endif;

1
Tại sao bạn lại chạy WP Query thứ hai (mới)? Sẽ không đủ để kiểm tra giá trị meta?
kaiser

2
Tôi không bao giờ nói để tạo ra một vòng lặp thứ hai. Tôi đã chỉ cho anh ta mục đích ví dụ nếu anh ta chạy nhiều vòng trên một trang. Codex nói sẽ sử dụng query_posts cho vòng lặp chính và WP_Query mới cho vòng lặp tùy chỉnh thứ hai. Sự hiểu lầm không xứng đáng với -1. :)
Brian Fegter

1
Đảo ngược. Btw: Hãy xem câu trả lời này . Cũng cần lưu ý rằng sự lựa chọn tốt nhất có thể là sử dụng các bộ lọc để sửa đổi Truy vấn.
kaiser

1
Tôi cho rằng hầu hết việc thực hiện các bài đăng "nổi bật" sẽ sử dụng vòng lặp thứ cấp , thay vì Vòng lặp chính - thường ở dạng danh sách các bài đăng nổi bật hoặc thanh trượt hiển thị các bài đăng nổi bật, v.v.
Chip Bennett

1
Chỉ cần một lưu ý về mã đi trên hàm.php, tôi nghĩ rằng nó cần thêm ")" trên dòng 15. Có thể không?
Đậu phộng

0

Tôi đã cố chạy mã này và nó giúp tôi rất nhiều để hiển thị bài đăng nổi bật của tôi trên trang chủ cho loại bài đăng tùy chỉnh nghiên cứu trường hợp của tôi. Cảm ơn rất nhiều.

         <?php $args = array( 
                'post_type' => 'case_studies',
                'posts_per_page' => 1,
                'meta_key' => 'featured_post',
                'meta_value' => 1
            );

            $featured = new WP_Query($args);

            if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post(); ?>
                <div class="c-image"><?php the_post_thumbnail('large'); ?></div>
                <div class="cstext">
                     <article>
                        <h2><?php the_title(); ?></h2>  
                        <span class="sub-title"> USAF SOCONS </span>
                        <?php the_content(); ?>
                        <a href="<?php echo get_permalink(); ?>" class="readmore">Learn More</a>
                    </article> 

                    <a href="/case-studies" class="btn-primary">View all Case Studies</a>

                </div> 

            <?php 
                endwhile; 
                    else: 'No Content Added';
            endif; ?>
    </div>
</div>  

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.