Cách thay thế ngày đăng bằng một ngày tùy chỉnh trong Genesis

Trong nhóm Genesis Facebook, một người dùng đã hỏi:

Tôi đang sử dụng Magazine Pro với một số trường tùy chỉnh được tạo qua ACF. Tôi đã thiết lập trang chủ bằng tiện ích Bài đăng nổi bật của Genesis ở một số nơi. Trong một trong các khu vực tiện ích, tôi muốn xóa thông tin ngày đăng mặc định hiển thị dưới dạng lớp phủ của hình ảnh nổi bật và thay thế bằng trường tùy chỉnh ngày. (Trường tùy chỉnh thực sự là một ngày sự kiện không có mối quan hệ với ngày đăng). Làm thế nào để tôi làm điều này?

Có hai cách để thực hiện điều này.

Với phương pháp 1, bạn phải thay thế [post_date] bằng [event_date] nếu cần. Ví dụ: trong các vật dụng.

Phương pháp 2 là tự động và hoạt động trên toàn bộ trang web. Ngày đăng (bất kỳ nơi nào nó xuất hiện) được thay thế bằng giá trị của trường tùy chỉnh.

Trong cả hai phương pháp, chúng tôi sẽ đảm bảo rằng nếu không có ngày tùy chỉnh, ngày đăng tiêu chuẩn (xuất bản) sẽ được thiết lập để xuất hiện.

Đầu tiên, hãy tạo trường ngày tùy chỉnh của chúng tôi.

Cài đặt và kích hoạt Trường tùy chỉnh nâng cao.

Thêm một nhóm trường mới được gọi là say, có một trường kiểu như vậy (tệp xuất XML):Post Meta Date Picker

Chỉnh sửa (các) Bài đăng của bạn và đặt Ngày sự kiện của bạn bằng cách sử dụng công cụ chọn ngày.

Phương pháp 1 - Sử dụng mã ngắn tùy chỉnh

Hãy tạo một shortcode tùy chỉnh để kiểm tra trường tùy chỉnh và hiển thị giá trị của nó nếu có và nếu không, ngày đăng tiêu chuẩn (xuất bản).[event_date] event_date

Thêm phần sau vào functions.php của chủ đề con :

add_shortcode( 'event_date', 'custom_event_date_shortcode' );
/**
 * Create `event_date` shortcode.
 *
 * @return string Value of a `event_date` custom field. If the custom field is empty, entry published date.
 */
function custom_event_date_shortcode() {
    // get and store the value of event_date custom field.
    $event_date = get_post_meta( get_the_ID(), 'event_date', true );

    if ( $event_date ) {
        // make date object.
        $event_date = new DateTime( $event_date );

        return sprintf( '<time %s>', genesis_attr( 'entry-time' ) ) . $atts['before'] . $atts['label'] . $event_date->format( get_option( 'date_format' ) ) . $atts['after'] . '</time>';
    } else {
        return do_shortcode( '[post_date]' );
    }
}

Bây giờ, hãy chỉnh sửa (các) tiện ích của bạn và thay thế, chẳng hạn như

[post_date] By [post_author_posts_link] [post_comments]

với

[[event_date]] By [post_author_posts_link] [post_comments]

Phương pháp 2 - Sử dụng genesis_post_date_shortcode móc lọc

Thêm phần sau vào functions.php của chủ đề con :

add_filter( 'genesis_post_date_shortcode', 'custom_post_date_shortcode', 10, 2 );
/**
 * Produces the date of post publication.
 * If the post's `event_date` custom field is present, its value will be shown. Otherwise, the post date.
 *
 * @param  string $output Existing output for `post_date` shortcode.
 * @param  array|string $atts   Shortcode attributes. Empty string if no attributes.
 * @return string         Modified output for `post_date` shortcode.
 */
function custom_post_date_shortcode( $output, $atts ) {
    // get and store the value of event_date custom field.
    $event_date = get_post_meta( get_the_ID(), 'event_date', true );

    if ( $event_date ) {
        // make date object.
        $event_date = new DateTime( $event_date );

        if ( 'relative' === $atts['format'] ) {
            $display = genesis_human_time_diff( $event_date->format( 'U' ), current_time( 'timestamp' ), $atts['relative_depth'] );
            $display .= ' ' . __( 'ago', 'genesis' );
        } else {
            $display = $event_date->format( $atts['format'] );
        }

        $output = sprintf( '<time %s>', genesis_attr( 'entry-time' ) ) . $atts['before'] . $atts['label'] . $display . $atts['after'] . '</time>';
    }

    return $output;
}