¿Cómo crear enlaces permanentes sin páginas individuales en wordpress?

Estoy creando mi propio tema de WordPress, que es un poco diferente porque no tendrá páginas individuales (o al menos, no se podrá acceder a ninguna página). Todo el sitio web contiene solo la página de inicio (con el bucle) y las páginas de publicaciones anteriores.

Quiero vincular a publicaciones individuales dentro del bucle, como site.com # post-124 o site.com/paged=5#post-214.

Ya creé una función que hace esto:

function getPermalink($id,$postsPerPage) {
    $postNumber = Get_Post_Number($id); 
    //a function that get's the post number based on 
    //the chronical order of published posts.
    $page = floor(($postNumber - 1) / $postsPerPage);
    $url = get_option('home');

    if($page > 0) {
        $url .= '/?paged=' . ($page + (1 - floor($page / 5)));
    }

    $url .= '#post-' . $id;
    return $url;
}

Puedes verlo en vivo aquí: http://mijnrealiteit.nl (las páginas de publicaciones anteriores se reemplazan por un complemento de desplazamiento infinito).

Esto funciona, sin embargo, se rompe cuando empiezo a agregar publicaciones porque todas las publicaciones anteriores se desplazarán a páginas más alejadas (esto hace que el enlace no sea válido).

A mi modo de ver, hay dos posibles soluciones:

  1. Cambie la estructura de enlaces permanentes para mostrar la paginación hacia atrás (de modo que x.com/paged=231 se convierta en la primera página "anterior". Sin embargo, esto no es fácil de usar.
  2. Crea enlaces con solo la ID y deja que wordpress maneje la redirección personalizada a la página en ese momento actual.

¿Existen mejores alternativas? Estoy seguro de que esto ya está resuelto en alguna parte, simplemente no pude encontrarlo.

preguntado el 06 de noviembre de 11 a las 14:11

1 Respuestas

Un amigo me empujó en la dirección correcta, lo construyo con bastante facilidad usando la opción 2:

La función getPermalink ahora es mucho más simple:

function getPermalink($id) {
    return get_option('home') . '/?f=' . $id;
}

No hice ninguna redirección personalizada, solo verifiqué en la página de inicio si se pasaba una 'f' en la solicitud GET:

$perma = $_GET['f'];
if(isset($perma) && !is_paged()) {
    $customposts = get_posts('p=' . $perma ); 
    foreach( $customposts as $post ) : 
        setup_postdata($post); ?>
            //load the post
    <?php endforeach;  
}?> 

Si eso es cierto, la publicación se obtendrá mediante la función get_posts de Wordpress. También verifico el bucle (normal) de la publicación que ya se ha servido:

<?php while (have_posts()) : the_post(); 
    if(get_the_ID() != $perma) { ?>
        //load the post
<?php } endwhile; ?>

respondido 08 nov., 11:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.