Question

Exemple d'utilisation:

J'ai un type poste qui se rapporte à un spectacle de musique. Le « show time » est saisi par la poste date de publication qui est fixé à un moment donné dans l'avenir. J'ai trouvé une fonction qui prend de messages blog postdatés et feuilles la date, mais le poste marques telles que publiées sur sauvegarde, mais ne l'ont pas été en mesure de déterminer comment le personnaliser pour un type de poste 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');
?>
Était-ce utile?

La solution

Impressionnant Combinant à la fois les réponses de Mike et Jan je suis venu avec ce qui ne fonctionne que sur le type de poste en question. Nous ne avons pas besoin conditionnel du spectacle parce que le crochet « de future_show » attrape uniquement le type poste de spectacle et mises à 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');
?>

Autres conseils

Je ne peux pas dire à coup sûr que je n'ai pas votre site à tester avec, mais je crois que vous avez juste besoin de retirer 'show' des appels de remove_action() et add_action(). La fonction wp_publish_post() est agnostique en ce qui concerne les types de poste, au moins c'est ce qu'il ressort de la lecture du code. Donc, 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 limiter seulement faire des spectacles que vous voudrez peut-être faire quelque chose comme ça (bien que la logique sera si vous avez besoin plus compliqué de travailler avec d'autres types de poste aussi):

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

Hope this helps?

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

pour les postes futurs normales, le dernier crochet sera future_post, mais pour votre type il sera future_show ou quel que soit votre type limace est.

Si tout ce que vous êtes désireux de faire est d'ajouter une date supplémentaire pour « heures de spectacle », il peut être plus facile d'ajouter une boîte de méta qui fait exactement cela - en utilisant la date de publication pour usurper il pourrait être potentiellement problématique, comme WordPress réglez-le sur le statut « futur » chaque fois qu'il est mis à jour avec un avenir date de publication (je pense), donc vous devrez être accrocher à chaque fois qu'un poste est mis à jour pour le régler à nouveau. De plus, cette façon, vous pouvez réserver « Date de publication » pour ce qu'il est prévu.

Je probablement utiliser un meta_key, et une boîte de méta personnalisée. Bien que cela dépend de la complexité de vos requêtes sont qui montrent les messages.

Si vous définissez la meta_value comme un horodatage, vous pouvez commander à la date de l'heure du spectacle encore, ou sélectionnez 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' );

obtenir tous « Would événements » avec une heure de représentation au plus tard, puis une semaine à partir de la date actuelle. Note: Ce qui précède est non testé, mais devrait travail:)

WP Dev Nacin utilise une substitution de fonction simple:

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top