it-swarm-vi.tech

Đánh dấu bài viết trong tương lai như đã xuất bản

Trường hợp sử dụng:

Tôi có một loại bài đăng liên quan đến một chương trình âm nhạc. 'Thời gian hiển thị' được lấy qua ngày xuất bản bài được đặt thành một thời gian trong tương lai. Tôi đã tìm thấy một chức năng lấy các bài đăng trên blog trong tương lai và để lại ngày nhưng đánh dấu bài đăng là được xuất bản khi lưu nhưng không thể tìm cách tùy chỉnh nó cho loại bài đăng tùy chỉnh.

Các chức năng dưới đây.

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action('future_post','show', '_future_post_hook');
        add_action('future_post', 'show', 'publish_future_post_now');
    }

    function publish_future_post_now($id) {
        // Set new post's post_status to "publish" rather than "future."
        wp_publish_post($id);
    }

    add_action('init', 'setup_future_hook');
?>
12
curtismchale

Tuyệt vời kết hợp cả hai câu trả lời từ Mike và Jan Tôi đã đưa ra câu trả lời chỉ hoạt động trên loại bài đăng trong câu hỏi. Chúng tôi không cần điều kiện hiển thị vì hook 'tương lai_show' chỉ lấy loại bài đăng của chương trình và cập nhật.

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action('future_show','_future_post_hook');
        add_action('future_show','publish_future_post_now');
    }

    function publish_future_post_now($id) {
        wp_publish_post($id);
    }

    add_action('init', 'setup_future_hook');
?>
6
curtismchale

Tôi không thể chắc chắn vì tôi không có trang web của bạn để kiểm tra nhưng tôi tin rằng bạn chỉ cần xóa 'show' khỏi các cuộc gọi remove_action()add_action(). Hàm wp_publish_post() không liên quan đến các loại bài đăng, ít nhất đó là những gì nó xuất hiện từ việc đọc mã. Vì vậy, hãy thử điều này:

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action('future_post', '_future_post_hook');
        add_action('future_post', 'publish_future_post_now');
    }

    function publish_future_post_now($id) {
        // Set new post's post_status to "publish" rather than "future."
        wp_publish_post($id);
    }

    add_action('init', 'setup_future_hook');
?>

Tất nhiên, nếu bạn muốn giới hạn chỉ làm các chương trình, bạn có thể muốn làm một cái gì đó như thế này (mặc dù logic sẽ phức tạp hơn nếu bạn cần nó để làm việc với các loại bài đăng khác):

function publish_future_post_now($id) {
    $post = get_post($id);
    if ('show' == $post->post_type)
        wp_publish_post($id);
}

Hi vọng điêu nay co ich?

6
MikeSchinkel

Tôi nghĩ rằng hành động này được gọi bởi wp_transition_post_status . Mã này là:

function wp_transition_post_status($new_status, $old_status, $post) {
    do_action('transition_post_status', $new_status, $old_status, $post);
    do_action("${old_status}_to_$new_status", $post);
    do_action("${new_status}_$post->post_type", $post->ID, $post);
}

Vì vậy, đối với các bài đăng bình thường trong tương lai, hook cuối cùng sẽ là future_post, nhưng đối với loại của bạn, nó sẽ là future_show hoặc bất cứ loại sên nào của bạn.

3
Jan Fabry

Nếu tất cả những gì bạn muốn làm là thêm một ngày thêm cho 'thời gian hiển thị', thì việc thêm một hộp meta chính xác là như vậy - sử dụng ngày Xuất bản để giả mạo có thể có vấn đề, vì WordPress sẽ đặt nó thành Trạng thái "tương lai" bất cứ khi nào nó được cập nhật với ngày xuất bản trong tương lai (tôi nghĩ), vì vậy bạn sẽ phải nối mỗi khi bài đăng được cập nhật để đặt lại. Ngoài ra, theo cách đó bạn có thể đặt trước "Ngày xuất bản" cho mục đích của nó.

Tôi có lẽ sẽ chỉ sử dụng meta_key và hộp meta tùy chỉnh. Mặc dù nó phụ thuộc vào mức độ phức tạp của các truy vấn của bạn mà hiển thị các bài đăng.

Nếu bạn đặt meta_value làm dấu thời gian, bạn có thể đặt hàng trước ngày giờ hiển thị hoặc chọn trước/sau một ngày nhất định:

$events = get_posts( 'post_type=events&meta_key=show_time&meta_value=' . strtotime( '+1 week' ) . '&meta_compare=<&orderby=meta_value' );

Sẽ nhận được tất cả "sự kiện" với thời gian chiếu không muộn hơn một tuần kể từ ngày hiện tại. Lưu ý: Trên đây chưa được kiểm tra, nhưng nên làm việc :)

1
Joe Hoyle

WP Dev Nacin sử dụng chức năng ghi đè chức năng đơn giản:

remove_action('future_post', '_future_post_hook');
add_filter( 'wp_insert_post_data', 'nacin_do_not_set_posts_to_future' );

function nacin_do_not_set_posts_to_future( $data ) {
    if ( $data['post_status'] == 'future' && $data['post_type'] == 'post' )
        $data['post_status'] = 'publish';
    return $data;
}
0
Adam David