Marquage du futur poste tel que publié

12

Cas d'utilisation:

J'ai un type de message qui se rapporte à une émission musicale. La «date du spectacle» est saisie via la date de publication après publication, qui est définie pour une date ultérieure. J'ai trouvé une fonction qui prend les articles de blog postdatés et laisse la date, mais marque le message comme étant publié lors de l'enregistrement, mais je n'ai pas été en mesure de le personnaliser pour un type d'article personnalisé.

La fonction est ci-dessous.

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

5 réponses

6

Formidable combinant les réponses de Mike et Jan, j’ai proposé cette solution qui ne fonctionne que pour le type de message en question. Nous n'avons pas besoin de la condition de show, car le hook 'future_show' ne saisit que le type de post et le met à jour.

<?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');
?>
    
réponse donnée curtismchale 13.08.2010 - 00:05
6

Je ne peux pas en être sûr, car je n'ai pas votre site à tester, mais je pense que vous devez simplement supprimer 'show' des remove_action() et add_action() appels. La fonction wp_publish_post() est agnostique en ce qui concerne les types d'articles, du moins c'est ce qui ressort de la lecture du code. Alors essayez ceci:

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

Bien sûr, si vous voulez vous limiter à faire des shows, vous voudrez peut-être faire quelque chose comme ceci (bien que la logique soit plus compliquée si vous en avez besoin pour travailler aussi avec d'autres types de posts):

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

Espérons-nous que cela vous aide?

    
réponse donnée MikeSchinkel 12.08.2010 - 19:02
3

Je pense que cette action est appelée par wp_transition_post_status Le code est:

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

Ainsi, pour les publications futures normales, le dernier hook sera future_post , mais pour votre type, il s'agira de future_show ou de votre slug de type.

    
réponse donnée Jan Fabry 12.08.2010 - 14:36
1

Si tout ce que vous voulez faire est d’ajouter une date supplémentaire pour les "heures de diffusion", il peut être plus facile d’ajouter une méta-boîte qui fait exactement cela. Utiliser la date de publication pour la falsifier peut être potentiellement problématique, car WordPress définissez-le sur le statut "future" chaque fois qu'il est mis à jour avec une date de publication future (je pense), vous devrez donc vous raccrocher chaque fois qu'un message est mis à jour pour le rétablir. En outre, de cette façon, vous pourriez réserver "Date de publication" à ce à quoi il est destiné.

J'utiliserais probablement juste un meta_key et une méta-boîte personnalisée. Bien que cela dépende de la complexité de vos requêtes qui montrent les messages.

Si vous définissez la meta_value comme horodatage, vous pouvez commander selon la date de la date du spectacle ou sélectionner avant / après une certaine date:

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

obtiendrait tous les "événements" avec une heure d’affichage au plus tard une semaine à compter de la date du jour. Remarque: Ce qui précède n'a pas été testé, mais devrait fonctionner:)

    
réponse donnée Joe Hoyle 12.08.2010 - 17:36
0

WP Dev Nacin utilise une simple substitution de fonction:

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;
}
    
réponse donnée Adam David 03.02.2014 - 10:58

Lire d'autres questions sur les étiquettes