Configuración de una URL canónica personalizada en Yoast WordPress SEO Plugin

3 minutos de lectura

avatar de usuario
ian

Reenviado debido a que no hay respuestas.

Tengo algunos problemas para configurar un título canónico personalizado con la API de SEO de WordPress: http://yoast.com/wordpress-seo-api-docs/

Tengo un tipo de publicación personalizada llamada diseños que usa una reescritura de URL personalizada. Toma la página base /diseño/ y le agrega el nombre del diseño como /diseño/a-diseño/. El canon en WordPress SEO por defecto es la página /diseño/.

Lo que quiero hacer es escribir una función que determine si es una página de diseño y devolver un canonical diferente. Puedo probar si es una página de diseño haciendo if ($design == ""){ y traté de usar la URL de enlace permanente personalizada, pero la función simplemente elimina el canónico por completo.

Aquí está mi función básica:

function design_canonical(){
    if ($design == "") {    
        // Leave blank and Yoast SEO will use default canonical for posts/pages
    }
    else {
        return $design['detailslink'];
    }
}
add_filter( 'wpseo_canonical', 'design_canonical' )

Está claro que está haciendo algo mal, pero no estoy del todo seguro de qué.

¿Pensamientos?

avatar de usuario
sigilosoninja

Podrías intentar algo como:

function design_canonical($url) {
    global $post;

    if ( get_post_type( $post->ID ) == 'design' ) {
        return site_url( '/design/' . $post->post_name );
    } else {
        // Do nothing and Yoast SEO will use default canonical for posts/pages
        return $url;
    }
}
add_filter( 'wpseo_canonical', 'design_canonical' );

  • Buena idea. Lo intenté, pero no funcionó. Hasta ahora, todo lo que he podido hacer es agregar add_filter(‘wpseo_canonical’, ‘__return_false’); a la plantilla para eliminar el canónico por completo en la página de diseños.

    – Ian

    22 de noviembre de 2012 a las 21:10

  • Incluso probé simplemente la función design_canonical() { return $design[‘detailslink’]; } add_filter(‘wpseo_canonical’, ‘design_canonical’); ¡pero no funcionó! Si hago eco de $diseño[‘detailslink’] sin embargo, funciona y muestra la URL adecuada.

    – Ian

    22 de noviembre de 2012 a las 21:12

  • Resulta que soy un retrasado. No funcionaba porque no estaba especificando $wp_query global para extraer la variable $design. Cuando hice esto, tu respuesta funcionó. ¡Gracias por tu ayuda!

    – Ian

    22 de noviembre de 2012 a las 21:32

avatar de usuario
Rafael

Hola, no pude responder a la publicación anterior, así que solo hago otra.

Traté de usar la respuesta de stealthyninja para un problema similar y casi funcionó. Excepto la última parte: la instrucción else vacía. No genera ningún resultado si la regla no coincide.

Tal vez Yoast actualizó su complemento en esto en los últimos 2 años, así que pensé que debería mencionarlo aquí.

El siguiente fragmento de código resolvió mi problema:

function design_canonical($url) {
    global $post;

    if ( get_post_type( $post->ID ) == 'design' ) {
         return site_url( '/design/' . $post->post_name );
    } else {
         return $url;
    }
}
add_filter( 'wpseo_canonical', 'design_canonical' );

  • Tengo un problema similar, solo una pregunta rápida Raphael, ¿desde dónde llamas a esta función? ¿Dentro de Yoast o la plantilla?

    – mattgcon

    11 mayo 2015 a las 17:26

  • Recomendaría llamar a esta función en el archivo functions.php de su tema activo. O (como hice yo) dentro de su propio complemento. Pero supongo que el primer caso es más común.

    – Rafael

    13 de mayo de 2015 a las 7:56

¿Ha sido útil esta solución?