Tengo una estructura de enlace permanente que se parece a esto:
/%category%/%postname%/
La base de categoría se establece en .
y tengo algunas categorías de publicaciones, pero quiero cambiar una estructura de enlace permanente solo para una de ellas, llamada Blog
.
Así que entiendo que necesito volver a escribir la URL para las publicaciones en esta categoría, y estoy usando esto:
add_filter("post_link", "custom_permalink", 10, 3);
function custom_permalink ($permalink, $post, $leavename) {
// Get the categories for the post
$category = get_the_category($post->ID);
if (!empty($category) && $category[0]->cat_name == "Blog") {
$permalink = trailingslashit(home_url("/" . $post->post_name . "/"));
}
return $permalink;
}
Por lo tanto, el enlace se ve bien (sin el /blog/
en URL), pero el resultado es
error 404
Ahora creo que necesito establecer las reglas de reescritura, tratando de lograrlo con lo siguiente:
add_action("generate_rewrite_rules", "custom_rewrite_rules");
function custom_rewrite_rules($wp_rewrite) {
// This rule will will match the post id in %postname%-%post_id% struture
$new_rules["^/([^/]+)/?$"] = "index.php?name=$matches[1]";
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
return $wp_rewrite;
}
Supongo que mis reglas de reescritura no son correctas. ¿Podría por favor mostrarme cómo se puede arreglar?
Actualizar:
Estaba jugando con eso y llegué a este punto:
function custom_rewrite_rules($wp_rewrite) {
$new_rules["([^/]*)/?$"] = "index.php?name=$matches[1]";
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
return $wp_rewrite;
}
Ahora funciona la estructura deseada, pero me sale Error
para las páginas de categoría. Significa que esto sigue siendo incorrecto ([^/]*)/?$
. ¿Cómo puedo limitarlo solo a las URL que tienen algo después de un /
?
Respuestas
0 para la respuesta № 1Estos deberian ayudarte
URL de Wordpress Reescrita - Hongkiat
Añadir regla de reescritura - Wordpress.org
0 para la respuesta № 2
Esto podría ser lo que estás buscando:
function archive_rewrite_rules(){
add_rewrite_rule(
"blog/([^/]*)/?$",
"index.php?post_type=post&post_name=$matches[1]",
"top"
);
}
add_action( "init", "archive_rewrite_rules" );
Teniendo blog/
como parte de la expresión regular debe limitar esta regla de reescritura para que solo se aplique a la categoría de blog.
Los enlaces permanentes de reescritura pueden verse afectados por la configuración de enlace permanente.