Hiển thị / truy vấn định dạng bài


7

WP 3.1 khiến mọi người phấn khích, nếu hơi bối rối, về định dạng bài đăng.

Kích hoạt định dạng bài đăng mới

Vấn đề kích hoạt định dạng bài đã được đề cập ở độ dài. Nó đơn giản như việc thêm dòng này vào hàm.php: add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );

Hiển thị bài viết của một định dạng nhất định

Nhưng vấn đề hiển thị các bài viết này hầu như không được đề cập ở tất cả. Cho phép ghi lại quá trình hiển thị / truy vấn bài đăng có định dạng nhất định bằng một ví dụ:

Giả sử chúng tôi muốn đặt cập nhật trạng thái giống như Twitter trong thanh bên. Thật dễ dàng để bật statusđịnh dạng bài đăng, nhưng làm thế nào để tôi thực sự truy vấn những bài đăng đó để làm cho chúng hiển thị trong thanh bên?

Tôi đã thực hiện khá nhiều tìm kiếm và chưa tìm thấy câu trả lời cho vấn đề này, tất cả đều được hoan nghênh đóng góp. Nếu chúng tôi đưa ra một câu trả lời tốt, tôi nghĩ đó sẽ là người đầu tiên ghi nhận vấn đề này.

Với sự biết ơn!

Câu trả lời:


8

Bạn có rất nhiều tùy chọn để hiển thị bằng tính năng "Định dạng bài đăng":

ví dụ: trong vòng lặp index.php, bạn có thể quyết định nội dung hiển thị dựa trên định dạng bài đăng bằng hàm has_post_format () :

        if ( has_post_format( 'aside' )) {
            echo the_content();
        }

        elseif ( has_post_format( 'chat' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'gallery' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'image' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_post_thumbnail('medium');
            echo the_content();
        }

        elseif ( has_post_format( 'link' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'quote' )) {
            echo the_content();
        }

        elseif ( has_post_format( 'status' )) {
            echo the_content();
        }

        elseif ( has_post_format( 'video' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'audio' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        else {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

Sử dụng get_template_part ()get_post_format () để có được một vòng lặp không dựa trên định dạng, Điều này giả sử rằng bạn đã tạo một tệp loop.php định dạng (nói định dạng-status.php) cho mỗi định dạng được sử dụng trong chủ đề của bạn để bạn chỉ cần gọi nó:

get_template_part( 'format', get_post_format() );

Và bạn cũng có thể truy vấn các bài viết dựa trên định dạng của chúng:

$args = array(
                'tax_query' => array(
                    array(
                        'taxonomy' => 'post-format',
                        'field' => 'slug',
                        'terms' => array( 'post-format-quote' )
                    )
                )
            )
            $query = new WP_Query( $args );

và cuối cùng (bây giờ) bạn có thể sử dụng "post_group ();" hoạt động theo phong cách dựa trên CSS

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

điều này sẽ tạo ra một cái gì đó như:

<div id="post-id" class=”post format-status>

Hy vọng điều này sẽ giúp bắt đầu


2

Bạn có thể sử dụng has_post_format hoặc bạn có thể sử dụng get_post_format . Lisa Sabin-Wilson có một bài viết hay bằng cách sử dụng chúng có tên là WordPress 3.1 Post Formats Reference .

has_post_format thí dụ: <?php if ( has_post_format( 'video' )) { echo 'this is the video format'; } ?>

get_post_format thí dụ: <?php $format = get_post_format( $post_id ); ?>


1

Mặc dù tất cả các phương pháp trên sẽ hoạt động, có một cách dễ dàng hơn để làm điều đó như được hiển thị bởi Dougal Campbell

while ( the_loop() ):
    get_template_part( 'format', get_post_format() );
endwhile;

Thực hiện theo phương pháp đó sẽ giết chết các câu lệnh có điều kiện và có nghĩa là bạn không phải thêm nhiều hơn nếu bạn thêm hỗ trợ cho định dạng bài đăng khác. Tất cả bạn sẽ phải làm là thêm tệp mẫu.


3
Làm thế nào khác với mã trong câu trả lời của tôi?
Bai Internet

Cuộc gọi tốt, thực sự không phải vậy, tôi đoán là tôi đã đọc qua các câu trả lời khác quá nhanh và chỉ bắt gặp những thứ có điều kiện giả sử phần còn lại giống nhau. Vì vậy, tôi xóa hoặc chỉ để lại b / c của liên kết đến bài viết blog dài hơn?
curtismchale

1

Chỉ cần thêm một bản cập nhật ngắn gọn, nếu bạn chỉ muốn truy vấn định dạng bài đăng "tiêu chuẩn" (mặc định là vậy), bạn phải truy vấn tất cả các bài viết KHÔNG ở các định dạng bài đăng khác. Điều này là do WordPress lưu trữ 'sai' thay vì 'tiêu chuẩn định dạng bài' cho các bài đăng tiêu chuẩn.

Khá khó chịu, nhưng đó là cách duy nhất tôi có thể làm được.

Đây là 'tax_query' tôi đã sử dụng để chỉ trả lại các bài đăng tiêu chuẩn:

'tax_query' => array(
    array(
        'taxonomy' => 'post_format',
        'field' => 'slug',
        'terms' => array('post-format-aside', 'post-format-gallery', 'post-format-link', 'post-format-image', 'post-format-quote', 'post-format-status', 'post-format-audio', 'post-format-chat', 'post-format-video'),
        'operator' => 'NOT IN'
    )
)

Ngoài ra, lưu ý rằng tên phân loại là "post_format" không phải "định dạng bài" như đã được viết ở trên. Tôi đã cố gắng sửa ví dụ trên, nhưng không thể chỉnh sửa một ký tự.


Đây là một lỗi đã biết và có một bản vá trong trac để sửa nó vào một ngày nào đó :) core.trac.wordpress.org/ticket/16149
mrwweb
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.