Móc / bộ lọc WordPress chèn trước nội dung hoặc sau tiêu đề


29

cố gắng chèn nội dung trước nội dung bài đăng trong các hàm của mình.php - Tôi biết cách sử dụng các móc wp thông thường, nhưng không chắc chắn làm thế nào để chèn vào các khu vực khác.

Đã thử điều này, nhưng nó giết chết nội dung trên bất kỳ loại bài đăng nào khác:

function property_slideshow( $content ) {
 if ( is_single() && 'property' == get_post_type() ) {
    $custom_content = '[portfolio_slideshow]';
    $custom_content .= $content;
    return $custom_content;
    } 
}
add_filter( 'the_content', 'property_slideshow' );

Làm thế nào để tôi thực hiện điều kiện này?

Câu trả lời:


39

Chỉ cần sử dụng the_contentbộ lọc, ví dụ:

<?php
function theme_slug_filter_the_content( $content ) {
    $custom_content = 'YOUR CONTENT GOES HERE';
    $custom_content .= $content;
    return $custom_content;
}
add_filter( 'the_content', 'theme_slug_filter_the_content' );
?>

Về cơ bản, bạn nối thêm nội dung bài đăng sau nội dung tùy chỉnh của bạn, sau đó trả về kết quả.

Chỉnh sửa

Như Franky @bueltge chỉ ra trong bình luận của mình, quá trình này giống với tiêu đề bài viết; chỉ cần thêm bộ lọc vào the_titlehook:

<?php
function theme_slug_filter_the_title( $title ) {
    $custom_title = 'YOUR CONTENT GOES HERE';
    $title .= $custom_title;
    return $title;
}
add_filter( 'the_title', 'theme_slug_filter_the_title' );
?>

Lưu ý rằng, trong trường hợp này, bạn nối thêm nội dung tùy chỉnh của mình sau Tiêu đề. (Không thành vấn đề; Tôi chỉ đi với những gì bạn đã chỉ định trong câu hỏi của bạn.)

Chỉnh sửa 2

Lý do mã ví dụ của bạn không hoạt động là vì bạn chỉ quay lại $contentkhi điều kiện của bạn được đáp ứng . Bạn cần phải trở lại $content, không sửa đổi, như là một elseđiều kiện của bạn. ví dụ:

function property_slideshow( $content ) {
    if ( is_single() && 'property' == get_post_type() ) {
        $custom_content = '[portfolio_slideshow]';
        $custom_content .= $content;
        return $custom_content;
    } else {
        return $content;
    }
}
add_filter( 'the_content', 'property_slideshow' );

Bằng cách này, đối với các bài đăng không thuộc loại bài 'thuộc tính', $contentđược trả lại, không được sửa đổi.


ngoài ra có thể thêm nội dung sau tiêu đề; bộ lọc the_title là hook bên phải.
bueltge

Câu hỏi @ChipBennett - làm thế nào để làm điều này với logic chỉ cho một loại bài đăng tùy chỉnh - Tôi đã cố gắng bọc nó if ( is_single() && 'property' == get_post_type() ) {}nhưng điều đó không hiệu quả với tôi
Jason

@ChipBennett - Tôi đã làm cho nó hoạt động trên loại bài đăng tùy chỉnh của mình, nhưng nội dung biến mất khỏi bất kỳ loại bài đăng nào khác. Xem chỉnh sửa ở trên.
Jason

1
Đó là bởi vì bạn không quay lại $contentcác loại bài đăng khác với loại bài đăng tùy chỉnh của bạn. Xem câu trả lời cập nhật.
Chip Bennett

Chỉ cần một lưu ý - bạn không cần khối {} khác - chỉ cần trả lại dự phòng. Nếu điều kiện được đáp ứng, trả về trong if () sẽ đưa bạn ra khỏi hàm, nếu bạn vượt qua if () thì trả về dự phòng sẽ quay trở lại.
phatskat

0
function property_slideshow( $content ) {
    if ( is_singular( 'property' ) ) {
        $custom_content = do_shortcode( '[portfolio_slideshow]' );
        $custom_content .= $content;
        }
        return $custom_content;
}
add_filter( 'the_content', 'property_slideshow' );

Các is_singularthẻ kiểm tra điều kiện nếu một bài đặc biệt đang được hiển thị và cho phép bạn chỉ định tham số $ post_types mà trong trường hợp này là bất động sản.

Ngoài ra, bạn có thể muốn xem xét do_shortcode


Đến trễ trò chơi ở đây, nhưng bạn đang trả về một biến trống trong trường hợp is_singular ('property') trả về false. Nếu bạn đảo ngược logic của mình ở đó và chỉ cần trả về nội dung $ trong trường hợp đó, bạn sẽ kết thúc bằng mã sạch hơn, dễ đọc hơn.
Travis Weston

Cũng có thể thêm người khác hoặc sử dụng một toán tử ternary. Đây là một ví dụ nhanh không được kiểm tra đầy đủ có thể được mở rộng.
Brad Dalton
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.