it-swarm-eu.dev

Označení budoucího datovaného příspěvku zveřejněno

Případ použití:

Mám typ příspěvku, který souvisí s hudební show. „Show time“ je zachycen přes datum zveřejnění příspěvku, které je v budoucnu nastaveno na určitou dobu. Našel jsem funkci, která bere budoucí datované příspěvky na blogu a zanechá datum, ale označí příspěvek jako publikovaný na Uložit, ale nebyl schopen zjistit, jak jej přizpůsobit pro vlastní typ příspěvku.

Funkce je níže.

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

Skvělé spojení obou odpovědí od Mika a Jana jsem přišel s tím, co funguje pouze na daném typu příspěvku. Nepotřebujeme podmínku přehlídky, protože háček 'future_show' chytí pouze typ příspěvku a aktualizace, které tento příspěvek obsahuje.

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

Nemůžu s jistotou říct, protože nemám vaše stránky testovat, ale věřím, že stačí odstranit 'show' z remove_action() a add_action() volání. Funkce wp_publish_post() je agnostická s ohledem na typy příspěvků, přinejmenším to, co se jeví z čtení kódu. Zkuste to takto:

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

Samozřejmě, pokud chcete omezit pouze na zobrazování, možná budete chtít něco takového udělat (i když logika bude složitější, pokud budete potřebovat pracovat i s jinými typy příspěvků):

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

Snad to pomůže?

6
MikeSchinkel

Myslím, že tato akce se nazývá wp_transition_post_status . Kód je:

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

Takže pro normální budoucí příspěvky bude poslední háček future_post, ale pro váš typ to bude future_show nebo jakýkoliv typ vašeho slimáka.

3
Jan Fabry

Pokud vše, co chcete udělat, je přidat další datum pro 'show times', může být snazší přidat meta box, který dělá přesně to, že - použití data publikování do spoofu může být potenciálně problematické, protože WordPress jej nastaví na "Budoucí" stav, kdykoliv je aktualizován s budoucím datem publikování (myslím), takže budete muset být hákování pokaždé, když je příspěvek aktualizován, aby ho znovu nastavil. Také tímto způsobem můžete vyhradit "Datum publikování" pro to, co je zamýšleno.

Já bych asi jen použít meta_key a vlastní meta box. Ačkoli to závisí na tom, jak složité jsou vaše dotazy, které zobrazují příspěvky.

Pokud nastavíte meta_value jako časovou značku, můžete si ji objednat podle data zobrazování podle data nebo vyberte před/po určitém datu:

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

Dostane všechny "události" s showtime nejpozději týden od aktuálního data. Poznámka: Výše ​​uvedené je netestované, ale by mělo pracovat :)

1
Joe Hoyle

WP Dev Nacin používá jednoduchou funkci:

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