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?
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
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