web-dev-qa-db-fra.com

Rendre l'image sélectionnée

Est-il possible de forcer l'utilisateur à définir l'image sélectionnée sur certains types de publication? Par exemple, j'ai le type de message personnalisé mm_photo et je souhaite afficher un message d'erreur ou empêcher en quelque sorte l'utilisateur de publier ou de mettre à jour le message lorsqu'il n'existe aucun jeu d'images en vedette.

6
Adam

Assez simple avec jQuery et le $typenow global:

add_action('admin_print_scripts-post.php', 'my_publish_admin_hook');
add_action('admin_print_scripts-post-new.php', 'my_publish_admin_hook');
function my_publish_admin_hook(){
    global $typenow;
    if (in_array($typenow, array('post','page','mm_photo '))){
        ?>
        <script language="javascript" type="text/javascript">
            jQuery(document).ready(function() {
                jQuery('#post').submit(function() {
                    if (jQuery("#set-post-thumbnail").find('img').size() > 0) {
                        jQuery('#ajax-loading').hide();
                        jQuery('#publish').removeClass('button-primary-disabled');
                        return true;
                    }else{
                        alert("please set a featured image!!!");
                        jQuery('#ajax-loading').hide();
                        jQuery('#publish').removeClass('button-primary-disabled');
                        return false;
                    }
                    return false;
                });
            });
        </script>

        <?php
    }
}
2
Bainternet

Essayez la réponse ici: https://stackoverflow.com/a/13575967

Pour répéter le code de cette réponse:

function featured_image_requirement() {

     if(!has_post_thumbnail()) {

          wp_die( 'You forgot to set the featured image. Click the back button on your browser and set it.' ); 

     } 

}

add_action( 'pre_post_update', 'featured_image_requirement' );
1
Matty J

Cela ne publiera pas l'article sans l'image sélectionnée.

add_filter( 'wp_insert_post_data', function ( $data, $postarr ) {
$post_id              = $postarr['ID'];
$post_status          = $data['post_status'];
$original_post_status = $postarr['original_post_status'];
if ( $post_id && 'publish' === $post_status && 'publish' !== $original_post_status ) {
    $post_type = get_post_type( $post_id );
    if ( post_type_supports( $post_type, 'thumbnail' ) && ! has_post_thumbnail( $post_id )) {
        $data['post_status'] = 'draft';
      }
}
return $data;
}, 10, 2 );

Cela notifiera à l'administrateur que l'image de la fonction est requise.

global $pagenow;
if ( $pagenow == 'post-new.php' || $pagenow == 'post.php' ) :
add_action( 'admin_notices', function () {
$post = get_post();
if ( 'publish' !== get_post_status( $post->ID ) && ! has_post_thumbnail( $post->ID ) ) { ?>
 <div id="message" class="error">
  <p> <strong>
   <?php _e( 'Please set a Featured Image. This post cannot be published without one.'); ?>
</strong> </p>
</div>
 <?php }
} );
endif;
0
Jahangeer Shams

si vous souhaitez exiger que tous les messages comportent une image sélectionnée avant de pouvoir être publiés, ajoutez ce fragment de code au functions.php de votre thème wordpress. Lorsque vous essayez de publier un article sans image sélectionnée, un message de l'administrateur s'affiche: "Vous devez sélectionner Image sélectionnée. Votre message est enregistré, mais il ne peut pas être publié. ”

add_action('save_post', 'heap_child_check_thumbnail');
add_action('admin_notices', 'heap_child_thumbnail_error');


function heap_child_check_thumbnail($post_id) {

  // change to any custom post type
  if (get_post_type($post_id) != 'post') {
    return;
  }


  if (!has_post_thumbnail($post_id)) {
    // set a transient to show the users an admin message
    set_transient("has_post_thumbnail", "no");
    // unhook this function so it doesn't loop infinitely
    remove_action('save_post', 'heap_child_check_thumbnail');
    // update the post set it to draft
    wp_update_post(array('ID' => $post_id, 'post_status' => 'draft'));
    add_action('save_post', 'heap_child_check_thumbnail');
  }
  else {
    delete_transient("has_post_thumbnail");
  }

}

function heap_child_thumbnail_error() {
  if (get_transient("has_post_thumbnail") == "no") {
    echo "<div id='message' class='error'><p><strong>You must select Featured Image. Your Post is saved but it can not be published.</strong></p></div>";
    delete_transient("has_post_thumbnail");
  }
}
0
jas