Ich habe meinem vorgestellten Bild ein benutzerdefiniertes Textfeld hinzugefügt, um es mit dem folgenden Code zu veröffentlichen.
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');
Es funktioniert gut!!! Dieser Code zeigt den zusätzlichen Textbereich nur im POST an. Aber wenn ich ein ausgewähltes Bild else
Teil ausgewählt habe, wird ausgeführt (nur das ausgewählte Bild wird zurückgegeben). Wenn Sie ein Bild hinzufügen, enthält $pagenow
admin-ajax.php
und get_post_type()
ist null. globale Variablen $post
erzeugt einen Nullwert. Was sollte ich jetzt tun?
Beachten Sie, dass für den admin_post_thumbnail_html
filter-Rückruf zusätzliche Eingabeargumente verfügbar sind, nämlich $post->ID
und $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 );
das wird innerhalb der _wp_post_thumbnail_html()
-Funktion angewendet.
Hier ist ein Beispiel, wie Sie den globalen Beitrag in Ihrem Snippet vermeiden können, indem Sie stattdessen das Eingabeargument $post->ID
verwenden:
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 );
Wenn Sie diese Filterung wirklich auf die Bildschirme post.php
und post-new.php
und den Ajax-Aufruf get-post-thumbnail-html
beschränken müssen, können Sie eine Prüfung wie die folgende hinzufügen:
if(
! did_action( 'load-post.php' )
&& ! did_action( 'load-post-new.php' )
&& ! did_action( 'wp_ajax_get-post-thumbnail-html' )
)
return $content;
aber dann nehme ich an, du bist z. Aufruf der "privaten" Kernfunktion _wp_post_thumbnail_html()
woanders? Diese ( unterstrichenen ) privaten Funktionen sind jedoch nicht für die Verwendung durch Plugin- und Theme-Entwickler vorgesehen, sondern nur für andere Kernfunktionen .