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.


No comments yet.