當(dāng)前位置:首頁(yè)>WordPress建站>WordPress開(kāi)發(fā)>WordPress自定義首頁(yè)、搜索、作者存檔、Feed訂閱輸出的文章類(lèi)型

WordPress自定義首頁(yè)、搜索、作者存檔、Feed訂閱輸出的文章類(lèi)型

自從WordPress添加了自定義文章類(lèi)型功能以來(lái),現(xiàn)在很多網(wǎng)站開(kāi)發(fā)或WordPress主題、插件都會(huì)用到自定義文章類(lèi)型,今天倡萌來(lái)說(shuō)下如何在首頁(yè)、搜索結(jié)果頁(yè)、作者存檔以及Feed訂閱輸出中限制文章類(lèi)型。這里所指的都是WordPress的主循環(huán)(即這些類(lèi)型頁(yè)面默認(rèn)的循環(huán))。

開(kāi)始之前,你可以通過(guò)《實(shí)例講解 WordPress 自定義文章類(lèi)型》專(zhuān)題了解什么是自定義文章類(lèi)型。

注:以下的代碼都可以添加到當(dāng)前主題的functions.php中,或者也可以添加到你自己的插件中。

限定首頁(yè)主循環(huán)的文章類(lèi)型

如果你的首頁(yè)是常規(guī)的博客列表,那這個(gè)方法是有效的。

/**
* 自定義首頁(yè)主循環(huán)的文章類(lèi)型
*/
function wpkj_homepage_pre_get_posts( $query ) {

    // 限定首頁(yè)的主循環(huán)
    if ( $query->is_home() && $query->is_main_query() ) {
        // 請(qǐng)根據(jù)你的實(shí)際需要,修改下面這個(gè)array數(shù)組的文章類(lèi)型
        $post_type = array( 'post', 'product', 'book' ); 
        $query->set( 'post_type', $post_type );

    }

}
add_action( 'pre_get_posts', 'wpkj_homepage_pre_get_posts', 99, 1 );

限定搜索結(jié)果頁(yè)的文章類(lèi)型

/**
* 自定義搜索結(jié)果頁(yè)面的文章類(lèi)型
*/
function wpkj_search_archive_pre_get_posts( $query ) {

    //限定搜索主循環(huán),并且是前臺(tái)頁(yè)面
    if ( $query->is_search && $query->is_main_query() && !is_admin() ) {
        // 請(qǐng)根據(jù)你的實(shí)際需要,修改下面這個(gè)array數(shù)組的文章類(lèi)型
        $post_type = array( 'post', 'product', 'book' ); 
        $query->set( 'post_type', $post_type );

    }

}
add_action( 'pre_get_posts', 'wpkj_search_archive_pre_get_posts', 99, 1 );

限定作者存檔頁(yè)的文章類(lèi)型

/**
* 自定義作者存檔頁(yè)的文章類(lèi)型
*/
function wpkj_author_archive_pre_get_posts( $query ) {

    //限定是作者存檔的主循環(huán)
    if ( $query->is_author() && $query->is_main_query() ) {
        // 請(qǐng)根據(jù)你的實(shí)際需要,修改下面這個(gè)array數(shù)組的文章類(lèi)型
        $post_type = array( 'post', 'product', 'book' ); 
        $query->set( 'post_type', $post_type );

    }

}
add_action( 'pre_get_posts', 'wpkj_author_archive_pre_get_posts', 99, 1 );

限定Feed訂閱輸出的文章類(lèi)型

/**
* 自定義Feed訂閱的文章類(lèi)型
*/
function wpkj_feed_pre_get_posts( $query ) {

    //限定是Feed輸出
    if ( $query->is_feed() ) {
        // 請(qǐng)根據(jù)你的實(shí)際需要,修改下面這個(gè)array數(shù)組的文章類(lèi)型
        $post_type = array( 'post', 'product', 'book' ); 
        $query->set( 'post_type', $post_type );

    }

}
add_action( 'pre_get_posts', 'wpkj_feed_pre_get_posts', 99, 1 );

將上面的所有功能集成到一個(gè)函數(shù)中

大家仔細(xì)看的上面的函數(shù)代碼,其實(shí)都是同一個(gè)模板,我們可以將他們集中在一個(gè)函數(shù)中:

/**
* 自定義首頁(yè)、搜索、作者存檔、Feed訂閱輸出的文章類(lèi)型
*/
function wpkj_custom_pre_get_posts( $query ) {

    // 自定義首頁(yè)主循環(huán)的文章類(lèi)型
    if ( $query->is_home() && $query->is_main_query() ) {
        // 請(qǐng)根據(jù)你的實(shí)際需要,修改下面這個(gè)array數(shù)組的文章類(lèi)型
        $post_type = array( 'post', 'product', 'book' ); 
        $query->set( 'post_type', $post_type );

    }

    // 自定義搜索結(jié)果頁(yè)面的文章類(lèi)型
    if ( $query->is_search && $query->is_main_query() && !is_admin() ) {
        // 請(qǐng)根據(jù)你的實(shí)際需要,修改下面這個(gè)array數(shù)組的文章類(lèi)型
        $post_type = array( 'post', 'product', 'book' ); 
        $query->set( 'post_type', $post_type );

    }

    // 自定義作者存檔頁(yè)的文章類(lèi)型
    if ( $query->is_author() && $query->is_main_query() ) {
        // 請(qǐng)根據(jù)你的實(shí)際需要,修改下面這個(gè)array數(shù)組的文章類(lèi)型
        $post_type = array( 'post', 'product', 'book' ); 
        $query->set( 'post_type', $post_type );

    }

    // 自定義Feed訂閱的文章類(lèi)型
    if ( $query->is_feed() && $query->is_main_query() ) {
        // 請(qǐng)根據(jù)你的實(shí)際需要,修改下面這個(gè)array數(shù)組的文章類(lèi)型
        $post_type = array( 'post', 'product', 'book' ); 
        $query->set( 'post_type', $post_type );

    }

}
add_action( 'pre_get_posts', 'wpkj_custom_pre_get_posts', 99, 1 );

當(dāng)然了,上面的函數(shù)還可以精簡(jiǎn),只不過(guò)為了可讀性和靈活性,就不再壓縮了,有能力的朋友可以自己修改。

pre_get_posts 鉤子講解

在上面的代碼中,我們都用到了 pre_get_posts 鉤子,它可以更改 WP_Query 查詢的各種參數(shù),不僅限于文章類(lèi)型 'post_type',還可以是分類(lèi)、每頁(yè)數(shù)量等等,你可以看下《掌握 WP_Query》專(zhuān)題的詳細(xì)介紹,或者查看官方的 WP_Query 文檔。

聲明:本站所有文章,如無(wú)特殊說(shuō)明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書(shū)籍等各類(lèi)媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號(hào) WPDAXUE
WordPress開(kāi)發(fā)

WordPress通過(guò)Cookie記錄用戶的搜索歷史

2020-4-21 10:03:36

WordPress開(kāi)發(fā)

WordPress刪除在類(lèi)中添加的action或filter鉤子

2020-4-27 9:14:18

0 條回復(fù) A文章作者 M管理員
    暫無(wú)討論,說(shuō)說(shuō)你的看法吧
?
個(gè)人中心
購(gòu)物車(chē)
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

博客| 乾安县| 永兴县| 中方县| 阿克苏市| 关岭| 多伦县| 资兴市| 泸溪县| 洛阳市| 英山县| 贺州市| 荣昌县| 乌拉特前旗| 巴彦县| 德江县| 井研县| 武城县| 南陵县| 城固县| 壤塘县| 沁阳市| 鄂托克旗| 宣武区| 星座| 西乌| 江西省| 无为县| 宝坻区| 淳化县| 德庆县| 阿城市| 通州区| 巨野县| 固阳县| 弥渡县| 南开区| 渑池县| 鸡泽县| 屏山县| 余姚市|