Cómo crear enlaces permanentes de paginación personalizados en wordpress

4 minutos de lectura

Tengo un artículo con varias páginas en mi blog de wordpress. si por ejemplo tengo el siguiente enlace en mi blog:

http://example.com/fotos-desgarradoras
alguna idea de cómo puedo cambiar el enlace de la segunda página de

http://ejemplo.com/fotos-desgarradoras/2
para http://example.com/fotos-desgarradoras/CADENA-PERSONALIZADA

CUSTOM-STRING pretendía ser un título personalizado dentro de la página

avatar de usuario
marin atanasov

Para lograr esto, necesitarás hacer 2 cosas:

  1. Deshabilitar la redirección canónica predeterminada de WordPress – esto es necesario, porque WordPress siempre redirigirá a la /2/ page cuando encuentra el parámetro de página en la URL o los argumentos de consulta.

  2. Agregue una regla de reescritura personalizada para dirigir su título personalizado a la segunda página de su página – esto es esencialmente necesario para permitir el formato de enlace que desea.

En términos de código, esto es lo que necesita (esta es una solución que funciona, la acabo de probar localmente):

// Removes the canonical redirection
remove_filter( 'template_redirect', 'redirect_canonical' );

// Add custom rewrite rules
add_action( 'init', 'my_add_custom_rewrite_rules' );
function my_add_custom_rewrite_rules() {
    // Slug of the target page
    $page_slug = 'heartbreaking-photos';

    // Page number to replace
    $page_num = 2;

    // Title you wish to replace the page number with
    $title="custom-string";

    // Add the custom rewrite rule
    add_rewrite_rule(
        '^' . $page_slug . "https://stackoverflow.com/" . $title . '/?$',
        'index.php?pagename=" . $page_slug . "&page=" . $page_num, "top'
    );
}

Hay tres cosas que quizás desee configurar o cambiar aquí:

  1. $page_slug – este es el slug de tu página, en tu caso este es heartbreaking-photos
  2. $page_num – el número de su página de paginación, en su caso esto es 2
  3. $title – el título que desea utilizar en lugar de su número de página 2.

Siéntase libre de modificar el código como desee, o copiarlo para cubrir más casos adicionales, similares a este.

EDITAR

Importante: Una vez que use el código, vaya a Configuración > Enlaces permanentes y haga clic en el botón “Guardar cambios”. Esto reconstruirá sus reglas de reescritura y es necesario para que la solución funcione.

Espero que ayude. Hazme saber si tienes alguna pregunta.

  • Gracias por su respuesta, probé su solución localmente pero no pude hacer que funcionara. Probé dos temas diferentes solo para estar seguro. Traté de agregar el código al principio y al final de la functions.php. También me aseguré de cambiar el post slug… ¿alguna idea de qué más puede ser diferente en mi máquina que impida que esto funcione…?

    – Delashmate

    31 de julio de 2016 a las 8:42

  • He actualizado mi respuesta, ya que me perdí una pequeña cosa. Después de realizar cambios para reescribir las reglas (como lo hace este código), debe ir a Configuración > Enlaces permanentes y hacer clic en el botón “Guardar cambios”. Esto hará que sus cambios realmente funcionen, porque las reglas de reescritura se regenerarán. Avísame si tienes problemas una vez que lo intentes.

    –Marin Atanasov

    31 de julio de 2016 a las 8:56


Puedes probar este códice. Pase el argumento y obtendrá la identificación de la página, el título de la página y los usará
https://codex.wordpress.org/Function_Reference/get_pages

ingrese la descripción de la imagen aquí

O puede llamar al título de la página por ID de página

$pagetitle= get_post_field( 'post_title', $page_id );

Ok, básicamente no desea mostrar el enlace de navegación debajo de la página (use css o modifique la plantilla de publicación en el tema secundario) y agregue su enlace personalizado. Si lo entiendo bien:

Elimina los enlaces de navegación (depende de tu tema, pero básicamente):

.nav-links { display: none; }

Puede agregar el enlace personalizado a través de la función + campos personalizados:

cree un campo personalizado, por ejemplo, “my-url” en su publicación, consulte el códice: https://codex.wordpress.org/Custom_Fields

agregue a su functions.php (en el tema secundario o en un complemento de sitio personalizado):

function my_page_add_to_content( $content ) {

    if ( ! empty(get_post_meta( get_the_ID(), 'my-url', true ) ) {
       $content .= '<a href="'.get_post_meta(%20get_the_ID(),%20'my-url',%20true%20).'">URL TEXT HERE</a>'
    }

    return $content;
}
add_filter( 'the_content', 'my_page_add_to_content' );

¿Ha sido útil esta solución?