Atributo personalizado para a tag de título com wp_title ()

4

Posso adicionar o itemprop ao elemento title e ainda usar wp_head() e add_theme_support( "title-tag" ) ?

Eu quero criar um tema e aprová-lo no wordpres.org , que usa microdados .

O significado anterior quer que o código HTML tenha a seguinte aparência:

<html itemscope itemtype="http://schema.org/WebPage" lang="en-US">
....
        <title itemprop="name">WordPress Weblog Theme &#8211; Just another WordPress site</title>
....

Agora eu não uso add_theme_support( "title-tag" ) e uso o seguinte código no header.php?

<title itemprop="name"><?php echo wp_get_document_title(); ?></title>
<?php wp_head(); ?>

Agora, o plug-in de verificação de temas diz:

  

REQUERIDO: o tema precisa ter uma chamada para wp_title (), idealmente no   arquivo header.php. REQUERIDO: o tema precisa ter tags,   idealmente no arquivo header.php. RECOMENDADO: Nenhuma referência a   add_theme_support ("title-tag") foi encontrado no tema. Isto é   recomendou que o tema implementasse essa funcionalidade para o WordPress   4.1 e acima.

    
por Bass Jobsen 30.05.2016 / 00:46

2 respostas

4

Como todo _wp_render_title_tag é verificar o suporte a title-tag e agrupar <title> tags, realmente não há motivo para que a implementação existente "não seja aprovada", já que a implementação adequada já é idêntica por meio de:

<title itemprop="name"><?php echo wp_get_document_title(); ?></title>

quando _wp_render_title_tag :

echo '<title>' . wp_get_document_title() . '</title>' . "\n";

(desde que a Verificação de Tema é uma verificação de diretriz, então e se ela não puder dizer que um padrão foi realmente seguido, o que, em teoria, não deve impedi-lo de passar?)

Mas, em qualquer caso, você pode contornar isso e melhorar a implementação existente ao mesmo tempo adicionando um filtro de substituição de personalização ... desativando a ação existente (como sugerido por @birgire) e (meu acréscimo) conectando uma função de quebra automática que chama _wp_render_title_tag e aplica o filtro a ela:

if (has_action('wp_head','_wp_render_title_tag') == 1) {
    remove_action('wp_head','_wp_render_title_tag',1);
    add_action('wp_head','custom_wp_render_title_tag_filtered',1);
}

function custom_wp_render_title_tag_filtered() {
    if (function_exists('_wp_render_title_tag')) {
        ob_start(); 
        _wp_render_title_tag(); 
        $titletag = ob_get_contents();
        ob_end_clean();
    } else {$titletag = '';}
    return apply_filters('wp_render_title_tag_filter',$titletag);
}

Como é prática prática ter um filtro disponível de qualquer maneira ....... Então, você pode adicionar suas próprias personalizações de caso de uso facilmente usando o novo filtro:

add_filter('wp_render_title_tag_filter','custom_wp_render_title_tag');

function custom_wp_render_title_tag($titletag) {
    $titletag = str_replace('<title>','<title itemprop="name">',$titletag);
    return $titletag;
}

Claro que seria muito mais claro se a função principal fosse simplesmente atualizada para:

function _wp_render_title_tag() {
    if ( ! current_theme_supports( 'title-tag' ) ) {
        return;
    }
    echo apply_filters( 'wp_render_title_tag' , '<title>' . wp_get_document_title() . '</title>' . "\n" );
}
    
por majick 30.05.2016 / 14:16
1

Infelizmente, o eco da tag <title> está atualmente conectado a general-template.php (linha 1062). Está em uma função privada, o que significa que você não pode modificá-la ou anulá-la. Então, no momento, você não pode modificar a tag. Você pode querer lançar um trac para pedir que eles apoiem isso no futuro.

    
por cjbj 30.05.2016 / 10:25