使用单个博客帖子作为网站首页,不重定向

时间:2012-04-11 作者:Mike

我正试图做一些类似于这个问题的公认答案的事情Is it possible to use a single custom post as the site front page

我的问题是,此实现会导致重定向。

例如,如果我将下面的代码添加到twentyeleven函数中。在默认WordPress上安装php,然后选择Hello World 从发布reading->front page 下拉我的主页url,如mysite.com 将重定向到mysite.com/?p=1. 因此,由于这种重定向,不可能真正停留在主页上。

是否可以避免此重定向?如果是这样,下面的解决方案将非常适合将帖子或自定义帖子显示为主页。

add_filter( \'get_pages\', \'add_pages_to_dropdown\', 10, 2 );

function add_pages_to_dropdown( $pages, $r ){
    if ( ! isset( $r[ \'name\' ] ) )
        return $pages;

    if ( \'page_on_front\' == $r[ \'name\' ] ) {
        $args = array(
            \'post_type\' => \'post\'
        );

        $portfolios = get_posts( $args );
        $pages = array_merge( $pages, $portfolios );
    }

    return $pages;
}

3 个回复
SO网友:Chip Bennett

我将在此处复制/粘贴我对该问题的答案:

实现这一点的方法有很多,尽管有些方法比其他方法更先进:

将日志标记为sticky, 然后将每页的帖子设置为1 (Dashboard -> Settings -> Reading)front-page.php 模板,并通过sticky post指定,或通过自定义post meta创建自定义front-page.php 模板,并创建一个动态侧栏(即小部件区域),在其中添加一个小部件以显示有问题的帖子(在此处插入许多其他方法…)why not just put that blog post content in a static Page, and then assign that static Page as the Front Page?

编辑:确保pretty permalinks 已启用,通过Dashboard -> Settings -> Permalinks.

SO网友:Mike

到目前为止,我的解决方案是reading->front page 选项并使用自定义帖子类型设置页面。

添加设置页面需要一些代码,但可以从add_submenu_page(); 作用

然后您可以使用pre_get_posts 使用您这样设置的选项更改查询的操作

add_action( \'pre_get_posts\', \'my_pre_get_posts\' );

function my_pre_get_posts($query){
        $option = get_option(\'my_option\');
        if(is_front_page()){
                $query->set(\'p\', $option);
                $query->set(\'post_type\', \'post\');
        }

    }
这样可以避免创建首页。php文件,它可以是更具体的主题文件的副本。这样做的缺点很明显,现在您有了一个额外的设置页面。不确定是否真的有“正确”的答案。

SO网友:TCattd

你可以只复印一份。php并将其命名为home。php并将其放在主题文件夹中。Wordpress现在将把它用作家。参考号:http://codex.wordpress.org/Template_Hierarchy

然后你只需改变家里的环路。php(基于single.php)看起来如下所述:http://codex.wordpress.org/Function_Reference/query_posts#Retrieve_a_Particular_Post

因此:

<?php
if ( have_posts() ) while ( have_posts() ) : the_post();
?>
变成这样:

<?php
query_posts( \'p=5\' );
if ( have_posts() ) while ( have_posts() ) : the_post();
?>
其中,“query\\u posts”行指定您想要作为主页的postID(在wp admin侧进行检查)。在本例中,p=5将查询postID=5。

或者您可以使用http://codex.wordpress.org/Class_Reference/WP_Query 方法以确保新循环不会破坏任何其他内容。

非常简洁。

结束

相关推荐

Multiple permalinks

我的博客使用/?p=378 多年的permalink构造。这对Google Analytics没有多大帮助,我想把它改为YEAR/MONTH/DAY/post-title 结构有没有一种方法可以做到这一点而不丢失向后兼容性,以便旧的链接可以工作?