Marcar las publicaciones con fecha futura como publicadas

12

Caso de uso:

Tengo un tipo de publicación que se relaciona con un espectáculo de música. El 'show time' se toma a través de la fecha de publicación posterior que se establece en algún momento en el futuro. He encontrado una función que toma las publicaciones de blog con fecha futura y deja la fecha, pero marca la publicación como publicada en guardar, pero no he podido imaginar cómo personalizarla para un tipo de publicación personalizada.

La función está debajo.

<?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');
?>
    
pregunta curtismchale 12.08.2010 - 05:33

5 respuestas

6

Fantástico combinando las respuestas de Mike y Jan, se me ocurrió esto, que funciona solo en el tipo de publicación en cuestión. No necesitamos el condicional de show porque el gancho 'future_show' solo toma el tipo de publicación del show y lo actualiza

<?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');
?>
    
respondido por el curtismchale 13.08.2010 - 00:05
6

No puedo asegurarlo ya que no tengo su sitio para probar, pero creo que solo necesita eliminar 'show' de las llamadas remove_action() y add_action() . La función wp_publish_post() es agnóstica con respecto a los tipos de publicación, al menos eso es lo que aparece al leer el código. Así que prueba esto:

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

Por supuesto, si desea limitarse a solo hacer shows, es posible que desee hacer algo como esto (aunque la lógica será más complicada si necesita trabajar con otros tipos de publicaciones también):

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

Espero que esto ayude?

    
respondido por el MikeSchinkel 12.08.2010 - 19:02
3

Creo que esta acción es llamada por wp_transition_post_status . El código es:

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

Entonces, para las publicaciones futuras normales, el último gancho será future_post , pero para tu tipo será future_show o cualquiera que sea tu tipo slug.

    
respondido por el Jan Fabry 12.08.2010 - 14:36
1

Si todo lo que desea hacer es agregar una fecha adicional para "horas de presentación", puede ser más fácil agregar un meta box que haga exactamente eso: usar la fecha de publicación para falsificarla podría ser potencialmente problemático, como lo hará WordPress. configúrelo en el estado "futuro" cada vez que se actualice con una fecha de publicación futura (creo), por lo que tendrá que estar enganchado cada vez que se actualice una publicación para restablecerla. Además, de esa manera usted podría reservar "Fecha de publicación" para lo que está destinado.

Probablemente solo usaría un meta_key y un meta box personalizado. Aunque depende de qué tan complejas sean sus consultas que muestren las publicaciones.

Si configura el meta_valor como una marca de tiempo, puede ordenar la fecha de la fecha del show, o seleccionar antes / después de una fecha determinada:

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

Obtendría todos los "eventos" con un show no más tarde de una semana a partir de la fecha actual. Nota: Lo anterior no está probado, pero debería funcionar :)

    
respondido por el Joe Hoyle 12.08.2010 - 17:36
0

WP Dev Nacin utiliza una función simple de anulació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;
}
    
respondido por el Adam David 03.02.2014 - 10:58

Lea otras preguntas en las etiquetas