Reescrevendo uma função central?

4

Pelo que entendi, é possível substituir as funções principais no wordpress, sem tocar no próprio núcleo, o que é um benefício óbvio.

Agora, certas funções são "conectáveis", mas não todas.

Estou tentando sobrescrever a função que exibe a miniatura da imagem em destaque no painel de administração para que seja um tamanho personalizado; não é realmente difícil fazer isso no núcleo. O problema surge quando eu tento colocá-lo no meu functions.php como uma função renomeada.

Esta é a função principal, editada. O que eu faço é apenas renomeá-lo e colocá-lo em functions.php, mas como eu realmente substituo a função 'core' em si?

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 );
}
    
por andy 19.07.2013 / 06:18

2 respostas

3

Você não precisa sobrescrever uma função principal para isso, o que você precisa fazer é ligar o filtro admin_post_thumbnail_html .

add_filter('admin_post_thumbnail_html', 'wpse107096_wp_post_thumbnail_html',10, 2);

function wpse107096_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 $content;
}

sim, você desperdiçará alguns ciclos de CPU por causa da computação repetida, mas essa é a maneira correta de fazer isso. Se isso te incomoda, então você deve procurar uma maneira mais inteligente de definir o tamanho de conteúdo necessário.

    
por Mark Kaplun 19.07.2013 / 09:19
2

Apenas as funções definidas como funções "conectáveis" podem ser substituídas em um plug-in / tema.

Mas ... Você não precisa reescrever uma função principal para redimensionar suas imagens em destaque. Em vez disso, veja set_post_thumbnail_size() (e, mais genericamente, add_image_size() ).

    
por Pat J 19.07.2013 / 06:25

Tags