web-dev-qa-db-fra.com

Empêcher la publication du message avant de définir une image sélectionnée?

Comme le titre le dit, je veux un plugin/une fonction pour empêcher/informer l’utilisateur quand il essaie de publier le message sans définir l’image sélectionnée.

DE L'AIDE ???

5
BIALY

La has_post_thumbnail() fonctionne pour moi, dans WP versions 3.4.1 et autres plus récemment. Mais dans cette logique, parce que WP publiera la publication même avec exit ou wp_die() ou tout autre élément permettant de terminer le script PHP. Pour éviter que la publication ne reste avec le statut publié, vous devrez la mettre à jour avant de terminer. Regardez le code ci-dessous:

add_action('save_post', 'prevent_post_publishing', -1);
function prevent_post_publishing($post_id)
{
    $post = get_post($post_id);

    // You also add a post type verification here,
    // like $post->post_type == 'your_custom_post_type'
    if($post->post_status == 'publish' && !has_post_thumbnail($post_id)) {
        $post->post_status = 'draft';
        wp_update_post($post);

        $message = '<p>Please, add a thumbnail!</p>'
                 . '<p><a href="' . admin_url('post.php?post=' . $post_id . '&action=edit') . '">Go back and edit the post</a></p>';
        wp_die($message, 'Error - Missing thumbnail!');
    }               
}
4
Tiago Vergutz
<?php
// Something like that should help, but you'll have to play with it to get it working:
// inside your functions.php file
function wpse16372_prevent_publish()
{
    if ( ! is_admin() )
        return;

    // This should be ok, but should be tested:
    $post_id = $GLOBALS['post']->ID;
    echo '<pre>Test for post ID: '; print_r( $post_id ); echo '</pre>';// the actual test

    // has_post_thumbnail() doesn't work/exist on/for admin screens (see your error msg). You need to find another way to test if the post has a thumbnail. Maybe some Javascript?
    //if ( ! has_post_thumbnail( $post_id );
    if ( ! has_post_thumbnail( $post_id ) )
    {
        ?>
        <!-- // 
        <script language="javascript" type="text/javascript">
            alert( 'you have to use a featured image' );
        </script>
        // -->
        <?php
        exit; // abort
    }
}
add_action( 'save_post', 'wpse16372_prevent_publish', 100 );
?>
1
kaiser