Num projecto WordPress que estamos a desenvolver, em que utilizamos o plugin WordPress SEO, tivemos necessidade de, na página de arquivo das categorias, colocar na title tag
do website a lista de todas as categorias superiores da actual.
Por exemplo, para esta estrutura de categorias (a bold), as title tags
seriam (a itálico):
- Categoria 1: Categoria 1
- Categoria 1.1: Categoria 1 – Categoria 1.1
- Categoria 1.1.1: Categoria 1 – Categoria 1.1 – Categoria 1.1.1
- Categoria 1.2: Categoria 1 – Categoria 1.2
- Categoria 1.1: Categoria 1 – Categoria 1.1
Para obter este resultado, criámos uma nova variável de substituição no WordPress SEO, %%recursive_term_title%%
, adicionando o seguinte código ao functions.php do nosso tema:
//Is WPSEO present and active? if ( defined( 'WPSEO_VERSION' ) ) { add_action( 'wpseo_register_extra_replacements', 'register_wpseo_custom_extra_replacements' ); function register_wpseo_custom_extra_replacements() { wpseo_register_var_replacement( '%%recursive_term_title%%', 'custom_wpseo_recursive_term_title', 'basic', 'Replaced by the term name and term parent names (recursively), if on category, tag or custom taxonomy archive' ); } function custom_wpseo_recursive_term_title( $replacement ) { if ( is_category() || is_tag() || is_tax() ) { global $wp_query; $term=$wp_query->get_queried_object(); return implode( ' %%sep%% ', custom_wpseo_term_title_array( $term, array() ) ); } } //Recursive term title function function custom_wpseo_term_title_array( $term, $title, $i=0 ) { $title[$i]=trim( $term->name ); $i++; if ( is_category() ) { //Category - Has parent? if ( $term->category_parent>0 ) { $parent_term=get_category( intval( $term->category_parent ) ); $title=custom_wpseo_term_title_array( $parent_term, $title, $i ); } } else { if ( is_tag() ) { //Tag - No parent } else { if ( is_tax() ) { //Custom taxonomy - Has parent? if ( $term->parent>0 ) { $parent_term=get_term( intval( $term->parent ), trim( $term->taxonomy ) ); $title=custom_wpseo_term_title_array( $parent_term, $title, $i ); } } } } //Return title array return $title; } }
Funciona com categorias, taxonomias personalizadas e tags/etiquetas (apesar destas últimas não terem etiquetas superiores) e pode ser utilizada em conjunto com outras variáveis no ecrã de configuração de modelos de Títulos & Metas de taxonomias do WordPress SEO:
A Webdados está ao seu dispor para fazer a análise e optimização para os motores de busca do seu site. Contacte-nos.
Actualização 2015-01-31: Passou a usar-se um array com os títulos das várias taxonomias que no fim é transformado em string com o separador %%sep%%
(variável do WPSEO), para evitar eventuais problemas com a função preg_replace
. Obrigado Luis Miguel Grave pela sugestão.
Ainda sem comentários.