it-swarm-id.com

Menandai posting tanggal mendatang sebagai dipublikasikan

Gunakan kasus:

Saya memiliki jenis posting yang berhubungan dengan pertunjukan musik. 'Waktu tayang' direbut melalui tanggal publikasi pos yang diatur untuk beberapa waktu di masa mendatang. Saya telah menemukan fungsi yang mengambil posting blog tanggal mendatang dan meninggalkan tanggal tetapi menandai posting sebagai dipublikasikan di save tetapi belum dapat menemukan cara untuk menyesuaikannya untuk jenis posting kustom.

Fungsinya di bawah.

<?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

Luar biasa menggabungkan kedua jawaban dari Mike dan Jan saya datang dengan ini yang hanya bekerja pada jenis posting yang dimaksud. Kami tidak memerlukan persyaratan acara karena pengait 'future_show' hanya mengambil jenis kiriman pertunjukan dan memperbarui itu.

<?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

Saya tidak dapat memastikan karena saya tidak memiliki situs Anda untuk diuji, tetapi saya yakin Anda hanya perlu menghapus 'show' dari remove_action() dan add_action() panggilan. Fungsi wp_publish_post() adalah agnostik berkenaan dengan jenis posting, setidaknya itulah yang muncul dari membaca kode. Jadi coba ini:

<?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');
?>

Tentu saja jika Anda ingin membatasi hanya melakukan pertunjukan, Anda mungkin ingin melakukan sesuatu seperti ini (walaupun logikanya akan lebih rumit jika Anda memerlukannya untuk bekerja dengan jenis posting lain juga):

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

Semoga ini membantu?

6
MikeSchinkel

Saya pikir tindakan ini dipanggil oleh wp_transition_post_status . Kode tersebut adalah:

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);
}

Jadi untuk posting normal di masa depan kait terakhir adalah future_post, tetapi untuk tipe Anda akan future_show atau apa pun tipe slug Anda.

3
Jan Fabry

Jika yang ingin Anda lakukan adalah menambahkan tanggal tambahan untuk 'waktu tayang', mungkin lebih mudah untuk menambahkan kotak meta yang melakukan hal itu - menggunakan tanggal Publikasikan untuk menipu itu bisa berpotensi bermasalah, karena WordPress akan mengaturnya Status "masa depan" setiap kali diperbarui dengan tanggal publikasi masa depan (saya pikir), jadi Anda harus mengaitkan setiap kali posting diperbarui untuk mengaturnya kembali. Juga, dengan begitu Anda dapat memesan "Tanggal Penerbitan" untuk apa yang dimaksudkan.

Saya mungkin hanya akan menggunakan meta_key, dan kotak meta khusus. Meskipun itu tergantung seberapa kompleks kueri Anda yang menunjukkan pos.

Jika Anda menetapkan meta_value sebagai timestamp, Anda dapat memesan berdasarkan tanggal waktu acara tetap, atau memilih sebelum/setelah tanggal tertentu:

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

Akan mendapatkan semua "acara" dengan waktu tayang paling lambat seminggu dari tanggal saat ini. Catatan: Di atas tidak teruji, tapi harus bekerja :)

1
Joe Hoyle

WP Dev Nacin menggunakan fungsi sederhana menimpa:

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