J'ai ajouté une zone de texte personnalisée à mon image sélectionnée uniquement pour publier, à l'aide du code suivant.
function add_featured_description( $content ) {
global $post;
$small_description = get_post_meta( $post->ID,'thumbnail_description', true ) !== '0' ? get_post_meta( $post->ID,'thumbnail_description', true ) : '';
global $pagenow;
if (is_admin() && ($pagenow == 'post-new.php' || $pagenow == 'post.php') && ( get_post_type()=='post' ) ) {
return $content .= '<div id="thumb_desc_container">
<textarea name="thumbnail_description" id="thumbnail_description" rows="4" style="width:100%;">'.$small_description.'</textarea>
<p class="hide-if-no-js howto" id="set-post-thumbnail-desc">Enter the image description.</p>
</div>';
} else{
return $content;
}
}
add_filter( 'admin_post_thumbnail_html', 'add_featured_description');
Ça fonctionne bien!!! Ce code affiche la zone de texte supplémentaire uniquement dans POST. Mais lorsque j'ai sélectionné une image sélectionnée, une partie else
est exécutée (seule l'image sélectionnée est renvoyée). Lorsque vous ajoutez une image, $pagenow
contient admin-ajax.php
et get_post_type()
est null. les variables globales $post
produisent une valeur nulle. Qu'est-ce que je devrais faire maintenant?
Notez qu'il existe des arguments d'entrée supplémentaires disponibles pour le rappel de filtre admin_post_thumbnail_html
, à savoir $post->ID
et $thumbnail_id
:
/**
* Filters the admin post thumbnail HTML markup to return.
*
* @since 2.9.0
* @since 3.5.0 Added the `$post_id` parameter.
* @since 4.6.0 Added the `$thumbnail_id` parameter.
*
* @param string $content Admin post thumbnail HTML markup.
* @param int $post_id Post ID.
* @param int $thumbnail_id Thumbnail ID.
*/
return apply_filters( 'admin_post_thumbnail_html', $content, $post->ID, $thumbnail_id );
qui est appliqué dans la fonction _wp_post_thumbnail_html()
.
Voici un exemple pour éviter la publication globale dans votre extrait, en utilisant plutôt l'argument d'entrée $post->ID
:
function wpse250432_add_featured_description( $content, $post_id, $thumbnail_id ) {
$small_description = get_post_meta( $post_id, 'thumbnail_description', true );
// Target only the 'post' post type
if ( 'post' === get_post_type( $post_id ) )
$content .= '<div id="thumb_desc_container">...</div>'; // Edit
return $content;
}
add_filter( 'admin_post_thumbnail_html', 'wpse250432_add_featured_description', 10, 3 );
Si vous avez vraiment besoin de restreindre ce filtrage aux écrans post.php
et post-new.php
et à l'appel get-post-thumbnail-html
ajax, vous pouvez ajouter une coche comme celle-ci:
if(
! did_action( 'load-post.php' )
&& ! did_action( 'load-post-new.php' )
&& ! did_action( 'wp_ajax_get-post-thumbnail-html' )
)
return $content;
mais alors je suppose que vous êtes par exemple appelez la fonction _wp_post_thumbnail_html()
"privée" ailleurs? Mais ces ( underscored ) les fonctions privées ne sont pas destinées à être utilisées par les développeurs de plugins et de thèmes, mais uniquement par d’autres fonctions principales .