/ / Regla de reescritura personalizada de WordPress para una categoría específica: wordpress, .htaccess, url-rewriting, permalinks

Regla de reescritura personalizada de WordPress para una categoría específica: wordpress, .htaccess, url-rewriting, permalinks

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 № 1

Estos 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.