如何在wordpress中创建没有单页的永久链接?

时间:2011-11-06 14:59:25

标签: php wordpress permalinks

我正在创建自己的wordpress主题,它有点不同,因为它不会有单个页面(或至少,没有单个页面可以访问)。整个网站只包含主页(带循环)和以前的帖子页面。

我想链接到循环内的各个帖子,例如site.com#post-124或site.com/paged=5#post-214。

我已经创建了一个执行此操作的函数:

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;
}

你可以在这里看到它:http://mijnrealiteit.nl(之前的帖子页面被一个infite滚动插件取代)。

这很有效,但是当我开始添加帖子时它会中断,因为之前的所有帖子都会转移到更远的页面(这会使链接无效)。

我认为有两种可能的解决方案:

  1. 更改永久链接结构以向后显示分页(因此x.com/paged=231成为第一个'上一页'。但这不是用户友好的。
  2. 只使用ID创建链接,让wordpress在当前时间点处理自定义重定向到页面。
  3. 有更好的选择吗?我确定这已经解决了,我找不到它。

1 个答案:

答案 0 :(得分:1)

我被朋友推向了正确的方向,我使用选项2轻松地构建它:

getPermalink函数现在变得更加简单:

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

我没有进行任何自定义重定向,我只是在主页上检查了GET请求中传递的'f':

$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;  
}?> 

如果确实如此,将使用Wordpress的get_posts函数获取帖子。我还检查已经提供的帖子的(正常)循环:

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