如何使用自定义帖子类型的档案作为首页?

时间:2011-10-12 作者:Isaac Lubow

我想使用自定义的帖子类型存档作为网站的首页,以便

 http://the_site.com/
是否根据我的archive-{post-type}.php 文件

理想情况下,我希望使用is_front_page() 在我的functions.php 文件我尝试了以下方法,将一个名为“主页”的页面作为我的首页:

 add_filter(\'pre_get_posts\', \'my_get_posts\');
 function my_get_posts($query){
     global $wp_the_query;
     if(is_front_page()&&$wp_the_query===$query){
        $query->set(\'post_type\',\'album\');
        $query->set(\'posts_per_page\',-1);
     }
     return $query;
 }
但是首页返回了“主页”的内容,似乎忽略了自定义查询。

我做错了什么?总的来说,有没有更好的方法?

5 个回复
最合适的回答,由SO网友:Ijaas 整理而成

将静态页面设置为主页后,可以将其添加到functions.php 你可以走了。这将调用archive-POSTTYPE.php 模板也正确。

add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query){
    //Ensure this filter isn\'t applied to the admin area
    if(is_admin()) {
        return;
    }

    if($wp_query->get(\'page_id\') == get_option(\'page_on_front\')):

        $wp_query->set(\'post_type\', \'CUSTOM POST TYPE NAME HERE\');
        $wp_query->set(\'page_id\', \'\'); //Empty

        //Set properties that describe the page to reflect that
        //we aren\'t really displaying a static page
        $wp_query->is_page = 0;
        $wp_query->is_singular = 0;
        $wp_query->is_post_type_archive = 1;
        $wp_query->is_archive = 1;

    endif;

}

SO网友:Brad Dalton

将您的CPT存档重新命名为主页。php

然后使用pre\\u get\\u posts更改主页查询,以便仅显示CPT

function wpsites_home_page_cpt_filter($query) {
if ( !is_admin() && $query->is_main_query() && is_home() ) {
$query->set(\'post_type\', array( \'your-cpt\' ) );
    }
  }

add_action(\'pre_get_posts\',\'wpsites_home_page_cpt_filter\');
用自定义帖子类型的名称替换cpt。

SO网友:Eli

谢谢你的回答,ljaas,我正想解决这个问题。为了调用自定义帖子类型存档模板,我必须添加以下条件:

$wp_query->is_post_type_archive = 1;
$wp_query->is_archive = 1;

SO网友:Elio

在“设置”>“阅读”>“首页显示”中覆盖博客帖子和静态页面对我来说效果更好:

<?php
/**
 * Set custom post type archive as front page.
 *
 * @since 1.0.0
 */
function ql_set_as_front_page( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }
    if ( ql_is_front_page( $query ) ) {
        $query->set( \'page_id\', \'\' );
        $query->is_page = false;
        $query->is_singular = false;
        $query->set( \'post_type\', \'MYCPT\' );
        $query->is_archive = true;
        $query->is_post_type_archive = true;
    }
}
add_action( \'pre_get_posts\', \'ql_set_as_front_page\' );

/**
 * Taken from WP_Query::is_front_page and adapted to compare page_on_front with current page ID.
 * 
 * @since 1.0.0
 * 
 * @param object $query The main WP Query.
 */
function ql_is_front_page( $query ) {
    if ( \'posts\' == get_option( \'show_on_front\') && $query->is_home() )
        return true;
    elseif ( \'page\' == get_option( \'show_on_front\') && get_option( \'page_on_front\' ) && $query->get(\'page_id\') == get_option( \'page_on_front\' ) )
        return true;
    else
        return false;
}
我将其与使用过滤器的模板覆盖一起使用front_page_templatehome_template 返回自定义模板。

SO网友:nderambure

对我来说,它打破了分页:要么选择索引或静态页面作为主页,分页链接就会显示出来,但当单击第2页时,我得到:

对于索引页(默认):对于静态页,404页的结果与第1页的结果相同:“paged”参数随后被解释为显示页面类型分页,而不是post类型列表分页我认为需要一些重写规则来捕获分页参数并正确传递它。

无论如何,自定义模板页应该是带有一些额外重写规则的解决方案。

结束
如何使用自定义帖子类型的档案作为首页? - 小码农CODE - 行之有效找到问题解决它

如何使用自定义帖子类型的档案作为首页?

时间:2011-10-12 作者:Isaac Lubow

我想使用自定义的帖子类型存档作为网站的首页,以便

 http://the_site.com/
是否根据我的archive-{post-type}.php 文件

理想情况下,我希望使用is_front_page() 在我的functions.php 文件我尝试了以下方法,将一个名为“主页”的页面作为我的首页:

 add_filter(\'pre_get_posts\', \'my_get_posts\');
 function my_get_posts($query){
     global $wp_the_query;
     if(is_front_page()&&$wp_the_query===$query){
        $query->set(\'post_type\',\'album\');
        $query->set(\'posts_per_page\',-1);
     }
     return $query;
 }
但是首页返回了“主页”的内容,似乎忽略了自定义查询。

我做错了什么?总的来说,有没有更好的方法?

5 个回复
最合适的回答,由SO网友:Ijaas 整理而成

将静态页面设置为主页后,可以将其添加到functions.php 你可以走了。这将调用archive-POSTTYPE.php 模板也正确。

add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query){
    //Ensure this filter isn\'t applied to the admin area
    if(is_admin()) {
        return;
    }

    if($wp_query->get(\'page_id\') == get_option(\'page_on_front\')):

        $wp_query->set(\'post_type\', \'CUSTOM POST TYPE NAME HERE\');
        $wp_query->set(\'page_id\', \'\'); //Empty

        //Set properties that describe the page to reflect that
        //we aren\'t really displaying a static page
        $wp_query->is_page = 0;
        $wp_query->is_singular = 0;
        $wp_query->is_post_type_archive = 1;
        $wp_query->is_archive = 1;

    endif;

}

SO网友:Brad Dalton

将您的CPT存档重新命名为主页。php

然后使用pre\\u get\\u posts更改主页查询,以便仅显示CPT

function wpsites_home_page_cpt_filter($query) {
if ( !is_admin() && $query->is_main_query() && is_home() ) {
$query->set(\'post_type\', array( \'your-cpt\' ) );
    }
  }

add_action(\'pre_get_posts\',\'wpsites_home_page_cpt_filter\');
用自定义帖子类型的名称替换cpt。

SO网友:Eli

谢谢你的回答,ljaas,我正想解决这个问题。为了调用自定义帖子类型存档模板,我必须添加以下条件:

$wp_query->is_post_type_archive = 1;
$wp_query->is_archive = 1;

SO网友:Elio

在“设置”>“阅读”>“首页显示”中覆盖博客帖子和静态页面对我来说效果更好:

<?php
/**
 * Set custom post type archive as front page.
 *
 * @since 1.0.0
 */
function ql_set_as_front_page( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }
    if ( ql_is_front_page( $query ) ) {
        $query->set( \'page_id\', \'\' );
        $query->is_page = false;
        $query->is_singular = false;
        $query->set( \'post_type\', \'MYCPT\' );
        $query->is_archive = true;
        $query->is_post_type_archive = true;
    }
}
add_action( \'pre_get_posts\', \'ql_set_as_front_page\' );

/**
 * Taken from WP_Query::is_front_page and adapted to compare page_on_front with current page ID.
 * 
 * @since 1.0.0
 * 
 * @param object $query The main WP Query.
 */
function ql_is_front_page( $query ) {
    if ( \'posts\' == get_option( \'show_on_front\') && $query->is_home() )
        return true;
    elseif ( \'page\' == get_option( \'show_on_front\') && get_option( \'page_on_front\' ) && $query->get(\'page_id\') == get_option( \'page_on_front\' ) )
        return true;
    else
        return false;
}
我将其与使用过滤器的模板覆盖一起使用front_page_templatehome_template 返回自定义模板。

SO网友:nderambure

对我来说,它打破了分页:要么选择索引或静态页面作为主页,分页链接就会显示出来,但当单击第2页时,我得到:

对于索引页(默认):对于静态页,404页的结果与第1页的结果相同:“paged”参数随后被解释为显示页面类型分页,而不是post类型列表分页我认为需要一些重写规则来捕获分页参数并正确传递它。

无论如何,自定义模板页应该是带有一些额外重写规则的解决方案。

相关推荐

Organize functions.php

组织职能的最佳方式是什么。php的性能?我有几个add\\u操作调用、几个add\\u主题支持、几个add\\u过滤器和4个附加函数。对于面包屑、样式表、注册菜单和小部件。我们是否需要遵守订单?例如,首先是所有add\\u过滤器函数,然后是add theme\\u support等。不确定添加代码是否相关,因为这是一个一般性问题。如果需要,我很乐意更新这篇文章。

如何使用自定义帖子类型的档案作为首页? - 小码农CODE - 行之有效找到问题解决它

如何使用自定义帖子类型的档案作为首页?

时间:2011-10-12 作者:Isaac Lubow

我想使用自定义的帖子类型存档作为网站的首页,以便

 http://the_site.com/
是否根据我的archive-{post-type}.php 文件

理想情况下,我希望使用is_front_page() 在我的functions.php 文件我尝试了以下方法,将一个名为“主页”的页面作为我的首页:

 add_filter(\'pre_get_posts\', \'my_get_posts\');
 function my_get_posts($query){
     global $wp_the_query;
     if(is_front_page()&&$wp_the_query===$query){
        $query->set(\'post_type\',\'album\');
        $query->set(\'posts_per_page\',-1);
     }
     return $query;
 }
但是首页返回了“主页”的内容,似乎忽略了自定义查询。

我做错了什么?总的来说,有没有更好的方法?

5 个回复
最合适的回答,由SO网友:Ijaas 整理而成

将静态页面设置为主页后,可以将其添加到functions.php 你可以走了。这将调用archive-POSTTYPE.php 模板也正确。

add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query){
    //Ensure this filter isn\'t applied to the admin area
    if(is_admin()) {
        return;
    }

    if($wp_query->get(\'page_id\') == get_option(\'page_on_front\')):

        $wp_query->set(\'post_type\', \'CUSTOM POST TYPE NAME HERE\');
        $wp_query->set(\'page_id\', \'\'); //Empty

        //Set properties that describe the page to reflect that
        //we aren\'t really displaying a static page
        $wp_query->is_page = 0;
        $wp_query->is_singular = 0;
        $wp_query->is_post_type_archive = 1;
        $wp_query->is_archive = 1;

    endif;

}

SO网友:Brad Dalton

将您的CPT存档重新命名为主页。php

然后使用pre\\u get\\u posts更改主页查询,以便仅显示CPT

function wpsites_home_page_cpt_filter($query) {
if ( !is_admin() && $query->is_main_query() && is_home() ) {
$query->set(\'post_type\', array( \'your-cpt\' ) );
    }
  }

add_action(\'pre_get_posts\',\'wpsites_home_page_cpt_filter\');
用自定义帖子类型的名称替换cpt。

SO网友:Eli

谢谢你的回答,ljaas,我正想解决这个问题。为了调用自定义帖子类型存档模板,我必须添加以下条件:

$wp_query->is_post_type_archive = 1;
$wp_query->is_archive = 1;

SO网友:Elio

在“设置”>“阅读”>“首页显示”中覆盖博客帖子和静态页面对我来说效果更好:

<?php
/**
 * Set custom post type archive as front page.
 *
 * @since 1.0.0
 */
function ql_set_as_front_page( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }
    if ( ql_is_front_page( $query ) ) {
        $query->set( \'page_id\', \'\' );
        $query->is_page = false;
        $query->is_singular = false;
        $query->set( \'post_type\', \'MYCPT\' );
        $query->is_archive = true;
        $query->is_post_type_archive = true;
    }
}
add_action( \'pre_get_posts\', \'ql_set_as_front_page\' );

/**
 * Taken from WP_Query::is_front_page and adapted to compare page_on_front with current page ID.
 * 
 * @since 1.0.0
 * 
 * @param object $query The main WP Query.
 */
function ql_is_front_page( $query ) {
    if ( \'posts\' == get_option( \'show_on_front\') && $query->is_home() )
        return true;
    elseif ( \'page\' == get_option( \'show_on_front\') && get_option( \'page_on_front\' ) && $query->get(\'page_id\') == get_option( \'page_on_front\' ) )
        return true;
    else
        return false;
}
我将其与使用过滤器的模板覆盖一起使用front_page_templatehome_template 返回自定义模板。

SO网友:nderambure

对我来说,它打破了分页:要么选择索引或静态页面作为主页,分页链接就会显示出来,但当单击第2页时,我得到:

对于索引页(默认):对于静态页,404页的结果与第1页的结果相同:“paged”参数随后被解释为显示页面类型分页,而不是post类型列表分页我认为需要一些重写规则来捕获分页参数并正确传递它。

无论如何,自定义模板页应该是带有一些额外重写规则的解决方案。

相关推荐

Add code to Functions.php

我想知道我是否在函数中添加了一些短代码。php在我的主题和解决我的问题,会发生什么,如果我更新我的主题??更新后是否删除我的短代码??在将代码添加到函数后,更新主题是否会有任何问题。php?