WordPress : Supprimer l’image sélectionnée d’une page spécifique

Publié par Jean-Michel le

J’ai pu supprimer la métabox d’image en vedette des types de pages de publication personnalisées. Ci-dessous ce que j’ai utilisé :

add_action('do_meta_boxes', 'remove_thumbnail_box');
function remove_thumbnail_box() {
  remove_meta_box( 'postimagediv','page','side' );
}

Cependant, ce que je veux vraiment faire, c’est de l’appliquer uniquement à un modèle de page spécifique. Est-ce possible?

Merci!

Solution n°1 trouvée

Pour toute autre personne souhaitant supprimer la prise en charge des images en vedette par programme (les commentaires doivent être explicites):

/**
*   Removes the featured image metabox from specific pages (by ID)
*   @note: populate the $excluded_page_ids_array array with page IDs
*/
function eh_remove_featured_image_metabox_from_specific_pages() {
    // populate with page IDs to exclude featured image metabox from
    $excluded_page_ids_array = array( 38, 29 );
    // store the current post ID
    $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'];
    // check if the current page is in our excluded array
    if( in_array( $post_id, $excluded_page_ids_array ) ) {
        // remove featured image metabox
        remove_meta_box( 'postimagediv','page','side' );
    }
}
add_action( 'do_meta_boxes', 'remove_featured_image_metabox_from_specific_pages' );

Après avoir ajusté le tableau de pages à exclure, vous voudrez ajouter cet extrait à votre fichier themes functions.php.

Alternativement, vous pouvez supprimer l’image en vedette de toutes les pages, sauf celles spécifiées – où la métabox de l’image en vedette restera.

/**
*   Removes the featured image metabox from all pages except specified ones
*   @note: populate the $page_ids array with page IDs
*/
function eh_remove_featured_images_metabox_from_all_pages_except_specified() {
    // populate with page IDs to keep the featured image metabox on
    $page_ids = array( 25, 31 );
    $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'];
    if( ! in_array( $post_id, $page_ids ) ) {
        // remove featured image metabox
        remove_meta_box( 'postimagediv','page','side' );
    }
}
add_action( 'do_meta_boxes', 'eh_remove_featured_images_metabox_from_all_pages_except_specified' );

Solution n°2 trouvée

Ah, j’ai trouvé une solution.

$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;
$template_file = get_post_meta($post_id,'_wp_page_template',TRUE);
if ($template_file === 'page-template-name.php') {
  add_action('do_meta_boxes', 'remove_thumbnail_box');
  function remove_thumbnail_box() {
    remove_meta_box( 'postimagediv','page','side' );
  }
}

S’il y a une meilleure solution… n’hésitez pas à poster.

Merci!

Solution n°3 trouvée

Il existe une autre solution. En éditant lepage.php

Si votre fonctionnalité Image div ressemble à ci-dessous par exemple

<div class="thumbnail">
  <?php echo get_the_post_thumbnail( $post_id, $size, $attr ); ?>
</div>

vous pouvez utiliser

if (is_page( array( 42, ‘about-me’, ‘Contact’ ) ); // Renvoie true lorsque la Page affichée est soit post ID :42, soit post_name_slug « about-me », soit post_title « Contact ».

<?php
if (is_page( array( 42, 'about-me', 'Contact' ) ) ) {
    ?>
<div class="thumbnail" style="display:none;">
<?php echo get_the_post_thumbnail( $post_id, $size, $attr ); ?>
</div>
<?php
}else{
?>
<div class="thumbnail">
 <?php echo get_the_post_thumbnail( $post_id, $size, $attr ); ?>
</div>
<?php}?>
Catégories : Wordpress

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *