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.
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
}
}
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' );
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;
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");
}
}