Cambiar los permalinks solo para el tipo de publicación 'post'

5 jun 2018, 21:04:09
Vistas: 15.1K
Votos: 7

Como muchos otros, me gustaría cambiar: dominio.com/titulo-del-post a dominio.com/blog/titulo-del-post pero solo para el tipo de publicación 'post', no para 'page' y especialmente no para los tipos de contenido personalizados (de los cuales mi tema parece tener muchos).

He investigado en este foro y otras fuentes y sé que la respuesta general parece ser:

Cuando registras tu tipo de publicación, el argumento with_front de rewrite debe ser false.

$args = array(
    'rewrite' => array( 'with_front' => false ),
); 
register_post_type( 'your-post-type', $args );

Desafortunadamente, esto no ayuda a los principiantes. No entendemos qué significan las instrucciones anteriores. Aparentemente deberíamos volver a registrar el tipo de publicación por defecto "post" (aunque el tipo de publicación "post" ya existe y está en uso), pero no sabemos cómo ni dónde hacerlo. Si alguien puede aclarar el procedimiento necesario para cambiar las URLs de las entradas del blog, estaría muy agradecido.

5
Comentarios

La configuración del tipo de entrada post se controla en la pantalla de administración Ajustes > Enlaces permanentes.

Milo Milo
5 jun 2018 21:09:05

@Milo Gracias. Efectivamente, hay algunas configuraciones de URL que se pueden controlar de esa manera. Sin embargo, en mi caso particular, solo quiero cambiar la configuración de URL para entradas que tienen el tipo 'post'. Más precisamente, si voy a ajustes de enlaces permanentes -> Configuración común y en lugar de la opción actual "Nombre de la entrada" selecciono 'Estructura personalizada' y escribo '/blog/%postname%', no solo todas mis entradas de blog tendrán la palabra 'blog' antepuesta a la URL, sino también todos mis tipos de entradas personalizados. Este no es el resultado deseado.

Mihaela Grigore Mihaela Grigore
6 jun 2018 15:25:46

Ya tienes la respuesta a ese problema, los tipos personalizados deberían registrarse con with_front establecido en false como has descrito en tu pregunta anterior.

Milo Milo
6 jun 2018 15:51:28

@Milo Dado que estos tipos personalizados son creados por los desarrolladores del tema, nosotros, los usuarios principiantes de WordPress, no sabemos qué significa registrar un tipo personalizado. Por lo tanto, nuestra pregunta se refiere precisamente a qué es lo que necesitamos hacer para registrarlo y dónde. ¿Deberíamos incluir el código mencionado en un archivo functions.php en un tema hijo que herede el tema principal que utilizamos? En ese caso, ¿no significaría esto que estamos volviendo a registrar un tipo personalizado, ya que ya está registrado en el tema padre? Revelación completa: ya he intentado hacer lo anterior y no tiene ningún efecto, su enlace sigue cambiando.

Mihaela Grigore Mihaela Grigore
6 jun 2018 23:39:16

Si no controlas el código que registra el tipo de publicación, entonces hay un filtro que te permite modificar los argumentos sin tener que volver a registrar el tipo de publicación. Consulta esta pregunta y respuesta para ver un ejemplo.

Milo Milo
7 jun 2018 06:36:03
Todas las respuestas a la pregunta 3
4

Encontré la respuesta aquí. Recuerda pasar por allí y darle un like.

Lo publicaré aquí, para las personas que tienen prisa.


Coloca esto en el archivo functions.php:

function wp1482371_custom_post_type_args( $args, $post_type ) {
  if ( $post_type == "post" ) {
    $args['rewrite'] = array(
      'slug' => 'blog'
    );
  }

  return $args;
}
add_filter( 'register_post_type_args', 'wp1482371_custom_post_type_args', 20, 2 );

(Probado y funciona).

¡Recuerda!!

Recuerda A) Recuerda actualizar tus enlaces permanentes después (yendo a Ajustes >> Enlaces permanentes >> Haz clic en 'Guardar cambios' ).

Recuerda B) Si obtienes resultados extraños, intenta abrir una ventana de incógnito y ver si funciona allí. WordPress tiene una función que redirige a 'URL de coincidencia más cercana', que puede parecer confuso cuando juegas con los enlaces permanentes.


También podrías intentar encontrar un Plugin que lo haga. Yo no lo haría, ya que es bastante extenso agregar un plugin solo para ese propósito. Pero bueno, a veces puede ser satisfactorio disparar pájaros con cañones (ningún pájaro fue lastimado haciendo este chiste).

26 feb 2020 15:40:26
Comentarios

Una solución corta y bonita con una explicación razonable. Lamentablemente, no es lo que estoy buscando. Actualmente, utiliza la definición de "rewrite" para redirigir al enlace permanente antiguo ("/blog/post" -> "/post"). Sin embargo, quiero que mantenga la URL "/blog/post". ¿Cómo lograrías eso?

Chaoste Chaoste
2 nov 2020 15:42:43

Para ampliar esto: Se puede solucionar añadiendo lo siguiente: add_filter('pre_post_link', 'my_change_post_link', 10, 3); function my_change_post_link($permalink, $post, $leavename) { if (get_post_type($post) == 'post') { return "/blog" . $permalink; } return $permalink; }

Chaoste Chaoste
2 nov 2020 16:04:46

@Chaoste OMG, qué probabilidades hay de que necesitara esto justo al día siguiente. Busqué por todas partes - TYTY (¡Muchas gracias!)

gerbz gerbz
3 nov 2020 23:25:32

¿Esto no parece estar funcionando en 2023? Puedo ver que los $args se actualizan, pero no tienen efecto después de actualizar los enlaces permanentes.

dungey_140 dungey_140
13 mar 2023 13:11:55
0

¿Has probado esto?

function generate_rewrite_rules( $wp_rewrite ) {
      $new_rules = array(
        '(.?.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename=$matches[1]&paged=$matches[2]',
        'blog/([^/]+)/?$' => 'index.php?post_type=post&name=$matches[1]',
        'blog/[^/]+/attachment/([^/]+)/?$' => 'index.php?post_type=post&attachment=$matches[1]',
        'blog/[^/]+/attachment/([^/]+)/trackback/?$' => 'index.php?post_type=post&attachment=$matches[1]&tb=1',
        'blog/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
        'blog/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
        'blog/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$' => 'index.php?post_type=post&attachment=$matches[1]&cpage=$matches[2]',     
        'blog/[^/]+/attachment/([^/]+)/embed/?$' => 'index.php?post_type=post&attachment=$matches[1]&embed=true',
        'blog/[^/]+/embed/([^/]+)/?$' => 'index.php?post_type=post&attachment=$matches[1]&embed=true',
        'blog/([^/]+)/embed/?$' => 'index.php?post_type=post&name=$matches[1]&embed=true',
        'blog/[^/]+/([^/]+)/embed/?$' => 'index.php?post_type=post&attachment=$matches[1]&embed=true',
        'blog/([^/]+)/trackback/?$' => 'index.php?post_type=post&name=$matches[1]&tb=1',
        'blog/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&name=$matches[1]&feed=$matches[2]',
        'blog/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&name=$matches[1]&feed=$matches[2]',
        'blog/page/([0-9]{1,})/?$' => 'index.php?post_type=post&paged=$matches[1]',
        'blog/[^/]+/page/?([0-9]{1,})/?$' => 'index.php?post_type=post&name=$matches[1]&paged=$matches[2]',
        'blog/([^/]+)/page/?([0-9]{1,})/?$' => 'index.php?post_type=post&name=$matches[1]&paged=$matches[2]',
        'blog/([^/]+)/comment-page-([0-9]{1,})/?$' => 'index.php?post_type=post&name=$matches[1]&cpage=$matches[2]',
        'blog/([^/]+)(/[0-9]+)?/?$' => 'index.php?post_type=post&name=$matches[1]&page=$matches[2]',
        'blog/[^/]+/([^/]+)/?$' => 'index.php?post_type=post&attachment=$matches[1]',
        'blog/[^/]+/([^/]+)/trackback/?$' => 'index.php?post_type=post&attachment=$matches[1]&tb=1',
        'blog/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
        'blog/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
        'blog/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$' => 'index.php?post_type=post&attachment=$matches[1]&cpage=$matches[2]',
      );
      $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }
    add_action( 'generate_rewrite_rules', 'generate_rewrite_rules' );

    function update_post_link( $post_link, $id = 0 ) {
      $post = get_post( $id );
      if( is_object( $post ) && $post->post_type == 'post' ) {
        return home_url( '/blog/' . $post->post_name );
      }
      return $post_link;
    }
    add_filter( 'post_link', 'update_post_link', 1, 3 );
9 sept 2019 19:46:02
2
// Coloca este código en el archivo function.php
add_action('init', 'my_new_default_post_type', 1); 
function my_new_default_post_type() 
{ 
    register_post_type('post', array(
        // 'labels' => $labels, 
        'public' => true, 
        //'show_in_admin_bar' => true,
        '_builtin' => false, 
        '_edit_link' => 'post.php?post=%d', 
        'capability_type' => 'post', 
        'map_meta_cap' => true, 
        'hierarchical' => false, 
        'rewrite' => array('slug' => 'recursos/blog'), // Agrega tu slug aquí 
        'query_var' => false, 
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats'),
    )); 
    /* Si agregas el código anterior en function.php, la paginación de tu blog dejará de funcionar. Necesitarás agregar una regla de reescritura usando el plugin "Debug This" en la sección Query >> Rewrite y modificar tu rewrite_rule. */ 
    add_rewrite_rule('(.?.+?)/page/?([0-9]{1,})/?$', 'index.php?pagename=recursos/blog&paged=$matches[1]', 'top');
}
26 feb 2020 15:14:10
Comentarios

Hmm.. Yo no haría esto, ya que 'vuelve a registrar' el tipo de contenido post.

Zeth Zeth
26 feb 2020 15:25:39

Necesitas cambiar tu estructura de enlaces permanentes.

Harshal Solanki Harshal Solanki
27 feb 2020 11:20:37