Sitemaps de yoast y WPML hidden languages

Yoast trae sus propios hooks y filters.

Uno de estos últimos te permite insertar SQL en la consulta que hace para obtener todos los post que incluir en el sitemap. Por defecto muestra todos los post published pero a nosotros nos interesa filtrar aquellos que pertenecen a idiomas que están hidden en WPML. Como el punto de inserción de SQL no está en el WHERE sino en el JOIN lo que vamos a hacer es cruzar la tabla de post con la tabla de objetos traducidos que tiene WPML mediante un INNER JOIN para que resulten sólo aquellos post que estén en ambas tablas, como condición en el ON pondremos el filtro de idioma que no podemos poner en el WHERE.

En resumen: copia y pega ésto en el functions.php
if(isset($sitepress))
add_filter(‘wpseo_posts_join’, ‘sitemap_per_language’, 10, 2);
function sitemap_per_language($join, $type) {
global $wpdb, $sitepress;
 
$options = get_option(‘icl_sitepress_settings’);
if(isset($options[‘hidden_languages’])) {
$hidden = $options[‘hidden_languages’];
$hidden = implode(chr(39).chr(44).chr(39), $options[‘hidden_languages’]);
return ” JOIN ” . $wpdb->prefix . “icl_translations ON element_id = ID AND element_type = ‘post_$type’ AND not language_code in (‘$hidden’)”;
} else {
return “”;
}
}
 
 

volver arriba

2 comentarios para “Sitemaps de yoast y WPML hidden languages”

  1. Marcelo Cannobbio dice:

    Funciona prefecto.
    Gracias!

    Aqui va el código, porque copiar y pegar las comillas dan problemas:


    // Sitemaps de yoast y WPML hidden languages
    // https://www.filmac.com/sitemaps-de-yoast-y-wpml-hidden-languages/
    if( isset($sitepress) ) {
    function sitemap_per_language($join, $type) {
    global $wpdb, $sitepress;
    $options = get_option('icl_sitepress_settings');

    if( isset($options['hidden_languages']) ) {
    $hidden = $options['hidden_languages'];
    $hidden = implode(chr(39).chr(44).chr(39), $options['hidden_languages']);
    return " JOIN " . $wpdb->prefix . "icl_translations ON element_id = ID AND element_type = 'post_$type' AND not language_code in ('$hidden')";
    } else {
    return “”;
    }
    }
    add_filter('wpseo_posts_join', 'sitemap_per_language', 10, 2);
    }

Deja un comentario


Centro de preferencias de privacidad