As I understand it, it’s possible to overwrite core functions in wordpress, without touching the core itself, which is of obvious benefit.
Now, certain functions are ‘pluggable’, but not all of them.
I’m trying to overwrite the function that outputs the featured image thumbnail in the admin panel to be a custom size, it’s not really difficult to do this in the core. The problem arises when I try to put it in my functions.php as a renamed function.
This is the core function, edited. What I’d do is just rename it and put it in functions.php, but then how do I actually have it overwrite the ‘core’ function itself?
function _wp_post_thumbnail_html( $thumbnail_id = null, $post = null ) {
global $content_width, $_wp_additional_image_sizes;
$post = get_post( $post );
$upload_iframe_src = esc_url( get_upload_iframe_src('image', $post->ID ) );
$set_thumbnail_link = '<p class="hide-if-no-js"><a title="' . esc_attr__( 'Set featured image' ) . '" href="%s" id="set-post-thumbnail" class="thickbox">%s</a></p>';
$content = sprintf( $set_thumbnail_link, $upload_iframe_src, esc_html__( 'Set featured image' ) );
if ( $thumbnail_id && get_post( $thumbnail_id ) ) {
$old_content_width = $content_width;
$content_width = 700;
if ( !isset( $_wp_additional_image_sizes['post-thumbnail'] ) )
$thumbnail_html = wp_get_attachment_image( $thumbnail_id, array( $content_width, $content_width ) );
else
$thumbnail_html = wp_get_attachment_image( $thumbnail_id, 'post-thumbnail' );
if ( !empty( $thumbnail_html ) ) {
$ajax_nonce = wp_create_nonce( 'set_post_thumbnail-' . $post->ID );
$content = sprintf( $set_thumbnail_link, $upload_iframe_src, $thumbnail_html );
$content .= '<p class="hide-if-no-js"><a href="#" id="remove-post-thumbnail" onclick="WPRemoveThumbnail('' . $ajax_nonce . '');return false;">' . esc_html__( 'Remove featured image' ) . '</a></p>';
}
$content_width = $old_content_width;
}
return apply_filters( 'admin_post_thumbnail_html', $content, $post->ID );
}
You don’t need to override a core function for that, what you need to do is to hook on the
admin_post_thumbnail_html
filter.yes, you will waste some CPU cycles because of the repeated computation, but that is the proper way to do it. If it bothers you then you should look for a smarter way to set the proper required content size.
Only the functions defined as “pluggable” functions can be overridden in a plugin/theme.
But… You shouldn’t need to rewrite a core function to resize your featured images. See instead
set_post_thumbnail_size()
(and, more generally,add_image_size()
).