Atributo personalizado para la etiqueta del título con wp_title ()

4

¿Puedo agregar el itemprop al elemento title y seguir usando wp_head() y add_theme_support( "title-tag" ) ?

Quiero crear un tema y aprobarlo en wordpres.org que utiliza microdatos .

La anterior significa que quiero que el código HTML tenga el siguiente aspecto:

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

¿Ahora no uso add_theme_support( "title-tag" ) y uso el siguiente código en header.php?

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

Ahora el plugin de verificación de tema dice:

  

REQUERIDO: el tema debe tener una llamada a wp_title (), idealmente en el   archivo header.php. REQUERIDO: El tema debe tener etiquetas,   Idealmente en el archivo header.php. RECOMENDADO: No hay referencia a   add_theme_support ("title-tag") se encontró en el tema. Es   Recomendó que el tema implementara esta funcionalidad para WordPress.   4.1 y superior.

    
pregunta Bass Jobsen 30.05.2016 - 00:46

2 respuestas

4

Dado que todo _wp_render_title_tag hace es verificar el soporte para el tema title-tag y envolver las etiquetas <title> , realmente no hay razón por la que su implementación existente "no pasará", ya que la implementación correcta ya es idéntica a través de:

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

cuando _wp_render_title_tag hace:

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

(dado que la verificación de tema es una verificación de guía, ¿qué sucede si no se puede decir que realmente se ha seguido un estándar, que en teoría no debería impedir que se apruebe)?

Pero en cualquier caso, puede evitar este y mejorar la implementación existente al mismo tiempo agregando un filtro de anulación de personalización ... desenganchando la acción existente (según lo sugerido por @birgire) y (mi adición) enganchando una función de ajuste que llama a _wp_render_title_tag y le aplica el filtro:

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);
}

Ya que es una mejor práctica tener un filtro disponible de todos modos ....... Luego puede agregar sus propias personalizaciones de casos de uso fácilmente usando el nuevo 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;
}

Por supuesto, sería mucho más limpio si la función principal se actualizara simplemente a:

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" );
}
    
respondido por el majick 30.05.2016 - 14:16
1

Lamentablemente, el eco de la etiqueta <title> actualmente está cableado en general-template.php (línea 1062). Está en una función privada, lo que significa que no puede modificarla o anularla. Por lo tanto, en este momento no se puede modificar la etiqueta. Es posible que desee emitir un trac para solicitar que lo admitan en el futuro.

    
respondido por el cjbj 30.05.2016 - 10:25

Lea otras preguntas en las etiquetas