


WordPress中設(shè)置Post Type自定義文章類型的實例教程,wordpress實例教程_PHP教程
Jul 12, 2016 am 08:52 AMWordPress中設(shè)置Post Type自定義文章類型的實例教程,wordpress實例教程
什么是自定義post?
不要想當(dāng)然的認(rèn)為這里的post就是就是指博客中的文章,它只不過是一個文章類的代理詞而已,甚至你還可以認(rèn)為它是內(nèi)容。
自定義模型是沒有一個很標(biāo)準(zhǔn)的什么規(guī)定的,文章模型可以是你想的任何一個內(nèi)容模型,就拿wordpress本身來說就內(nèi)置了以下幾個內(nèi)容文章模型:
- 博客文章
- 頁面
- 附件
- 修正
- 導(dǎo)航等
你可以這樣去理解:它只要是想我們使用博客文章那樣用來創(chuàng)建、編輯和儲存數(shù)據(jù)的一種很靈活的內(nèi)容形式。
不過在這里我還是需要提醒下,博客內(nèi)置的post還是有點(diǎn)點(diǎn)不同的,你可以利用它含有分類、標(biāo)簽等去標(biāo)識內(nèi)容的!
為什么要自定義文章模型?
Wordpress已經(jīng)提供一些完善的默認(rèn)文章模型,并適用于大多數(shù)站點(diǎn),但我們還是需要更多的選擇。我列舉了一些我想到的一些可能有用內(nèi)容模型,并鏈接到相對應(yīng)的例子。
- 房產(chǎn)清單
- 活動日歷(我知道很多人對這個感興趣)
- 影視資料庫
- 書籍資料庫
- 沒有很多集成問題的論壇系統(tǒng)
- 類似WordPress Trac的票務(wù)系統(tǒng)
- 設(shè)計相冊或作品集
你還可以想到我列舉之外的更多內(nèi)容模型。而且我也想在以后學(xué)習(xí)更多關(guān)于論壇和票務(wù)系統(tǒng)的想法。這兩個系統(tǒng)我已經(jīng)實現(xiàn)并希望的得到一些反饋。
創(chuàng)建一個 post type
創(chuàng)建一個新的 Post Type 需要使用 register_post_type 函數(shù)來注冊一下。需要在你主題的 functions.php 文件下調(diào)用該函數(shù):
register_post_type( $post_type, $args );
$post_type 參數(shù)就是你自定義 Post Type 的名稱,Post Type 可以自定義的功能非常多,所以這個函數(shù)里面的 $args 參數(shù)會很多。所以通常會用下面這種格式來注冊:
function my_custom_post_product() { $args = array(); register_post_type( 'product', $args ); } add_action( 'init', 'my_custom_post_product' );
包裹在一個函數(shù)中,定義一個數(shù)組,然后掛靠到 init 這個 action 上。這樣 WordPress 在初始化的時候,就會執(zhí)行這個函數(shù)注冊一個自定義 Post Type,因為調(diào)用 register_post_type() 的時候,必須要在 admin_menu action 之前,在 after_setup_theme action 之后,所以這里最好掛靠到 init action 上。
參數(shù)很多,為了寫教程方便,只列出比較常用的參數(shù),大體結(jié)構(gòu)如下:
function my_custom_post_movie() { $labels = array( 'name' => _x( 'Movies', 'post type 名稱' ), 'singular_name' => _x( 'Movie', 'post type 單個 item 時的名稱,因為英文有復(fù)數(shù)' ), 'add_new' => _x( '新建電影', '添加新內(nèi)容的鏈接名稱' ), 'add_new_item' => __( '新建一個電影' ), 'edit_item' => __( '編輯電影' ), 'new_item' => __( '新電影' ), 'all_items' => __( '所有電影' ), 'view_item' => __( '查看電影' ), 'search_items' => __( '搜索電影' ), 'not_found' => __( '沒有找到有關(guān)電影' ), 'not_found_in_trash' => __( '回收站里面沒有相關(guān)電影' ), 'parent_item_colon' => '', 'menu_name' => 'Movies' ); $args = array( 'labels' => $labels, 'description' => '我們網(wǎng)站的電影信息', 'public' => true, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ), 'has_archive' => true ); register_post_type( 'movie', $args ); } add_action( 'init', 'my_custom_post_movie' );
這里為了直觀方便,我直接使用了中文,更好的應(yīng)該是使用英文然后通過本地化函數(shù)來翻譯成中文。
參數(shù)有點(diǎn)多,也可以使用 generatewp 工具自定義參數(shù),然后改改,會稍微方便一點(diǎn)。
從上面代碼可以看到 $args 數(shù)組里面有一個 labels 配置項,用來配置顯示文案有關(guān)的內(nèi)容,為了清晰所以單獨(dú)拿出來創(chuàng)建了一個數(shù)組。其他配置項看下英文也能猜出大體意思,如果想要詳細(xì)了解,可以看下官方文檔:register_post_type 。
將上面代碼加到主題 functions.php 的最下面,進(jìn)入后臺你會發(fā)現(xiàn)多出了 Movies 選項,這樣表示注冊成功:
這時候我們可以新建 Movie 發(fā)表一篇電影類型的文章了。但是這樣與文章類型基本相同,我們需要更多的自定義來完善我們的 Movie 類型。
為 Post Type 添加分類功能
就電影來說,可以分為科幻、動作、戰(zhàn)爭等類別,那么我們就為自定義的 Movie 添加分類功能,這樣就可以編輯新分類以及歸類我們的電影了。這個分類跟文章里面的分類性質(zhì)是一樣的。
添加分類功能需要使用函數(shù) register_taxonomy,使用方法也很簡單,跟注冊 Post Type 函數(shù)類似,只不過多了一個參數(shù)用來指定對應(yīng)的 Post Type :
register_taxonomy( $taxonomy, $object_type, $args );
就本例而言,可以配置如下常用參數(shù):
function my_taxonomies_movie() { $labels = array( 'name' => _x( '電影分類', 'taxonomy 名稱' ), 'singular_name' => _x( '電影分類', 'taxonomy 單數(shù)名稱' ), 'search_items' => __( '搜索電影分類' ), 'all_items' => __( '所有電影分類' ), 'parent_item' => __( '該電影分類的上級分類' ), 'parent_item_colon' => __( '該電影分類的上級分類:' ), 'edit_item' => __( '編輯電影分類' ), 'update_item' => __( '更新電影分類' ), 'add_new_item' => __( '添加新的電影分類' ), 'new_item_name' => __( '新電影分類' ), 'menu_name' => __( '電影分類' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, ); register_taxonomy( 'movie_category', 'movie', $args ); } add_action( 'init', 'my_taxonomies_movie', 0 );
添加到主題之后,我們看到出現(xiàn)了熟悉的文章分類功能,只不過上面的文案全部變成我們自定義的內(nèi)容了:
這里我們添加兩個分類作為演示。
為 Post Type 添加自定義 Meta Box
我們想要添加的電影類型不能僅僅只有正文內(nèi)容,我們還需要額外添加一些 導(dǎo)演 之類的有關(guān)內(nèi)容。那么就需要添加自定義 Meta Box,Meta Box 可以在文章發(fā)表頁面中添加自定義的表單,編寫文章的時候可以填寫額外的信息然后在前端調(diào)用出來。
自定義 Meta Box 需要用到 add_meta_box 函數(shù):
add_meta_box( $id, $title, $callback, $post_type, $context,$priority, $callback_args );
老規(guī)矩,具體參數(shù)內(nèi)容查看官方文檔,這里只介紹常用用法。我們注冊一個 Meta Box :
add_action( 'add_meta_boxes', 'movie_director' ); function movie_director() { add_meta_box( 'movie_director', '電影導(dǎo)演', 'movie_director_meta_box', 'movie', 'side', 'low' ); }
然后在配置參數(shù)里面指定了回調(diào)函數(shù) movie_director_meta_box,我們需要在這個函數(shù)里面創(chuàng)建表單:
function movie_director_meta_box($post) { // 創(chuàng)建臨時隱藏表單,為了安全 wp_nonce_field( 'movie_director_meta_box', 'movie_director_meta_box_nonce' ); // 獲取之前存儲的值 $value = get_post_meta( $post->ID, '_movie_director', true ); ?> <label for="movie_director"></label> <input type="text" id="movie_director" name="movie_director" value="<?php echo esc_attr( $value ); ?>" placeholder="輸入導(dǎo)演名稱" > <?php }
這樣就可以在文章界面邊欄顯示出來剛剛創(chuàng)建的表單了:
但是這時候,你的表單是沒法用的,因為你提交文章之后并沒有保存這個 Meta Box 的內(nèi)容,下面是驗證保存內(nèi)容的代碼:
add_action( 'save_post', 'movie_director_save_meta_box' ); function movie_director_save_meta_box($post_id){ // 安全檢查 // 檢查是否發(fā)送了一次性隱藏表單內(nèi)容(判斷是否為第三者模擬提交) if ( ! isset( $_POST['movie_director_meta_box_nonce'] ) ) { return; } // 判斷隱藏表單的值與之前是否相同 if ( ! wp_verify_nonce( $_POST['movie_director_meta_box_nonce'], 'movie_director_meta_box' ) ) { return; } // 判斷該用戶是否有權(quán)限 if ( ! current_user_can( 'edit_post', $post_id ) ) { return; } // 判斷 Meta Box 是否為空 if ( ! isset( $_POST['movie_director'] ) ) { return; } $movie_director = sanitize_text_field( $_POST['movie_director'] ); update_post_meta( $post_id, '_movie_director', $movie_director ); }
雖然最關(guān)鍵的函數(shù)就在最后一句,但是一定要注意安全的校驗。把這些代碼添加進(jìn) functions.php 文件之后,你的 Meta Box 就可以正常工作了。如果你需要更多表單,按照這個模式自定義表單結(jié)構(gòu),然后添加保存函數(shù)即可。
下面,我們迫不及待的添加兩部電影《魚與鍋之戰(zhàn):宿命對決》 和 《魚與鍋之戰(zhàn):我愛水煮魚》 內(nèi)容如下:
添加完之后,我們可以看下所有電影:
列表空蕩蕩的,好難看,我可不可以加上導(dǎo)演字段?當(dāng)然可以,使用 [manage $post type posts custom column](http://codex.wordpress.org/Plugin_API/Action_Reference/manage_$post_type_posts_custom_column) 即可實現(xiàn),我們添加:
add_action("manage_posts_custom_column", "movie_custom_columns"); add_filter("manage_edit-movie_columns", "movie_edit_columns"); function movie_custom_columns($column){ global $post; switch ($column) { case "movie_director": echo get_post_meta( $post->ID, '_movie_director', true ); break; } } function movie_edit_columns($columns){ $columns['movie_director'] = '導(dǎo)演'; return $columns; }
即添加了列導(dǎo)演字段,并從每篇文章中讀取出來。這樣我們的列表就變成了:
OK,我們的后端部分就這樣愉快的完成了。打開生成好的鏈接看下,咦,Not Found?是這樣的,如果你的網(wǎng)站設(shè)置了固定連接,當(dāng)你新建了 Post Type 之后,你必須要在后臺更新一下固定連接設(shè)置才行。找到后臺固定連接,再點(diǎn)擊一下下面的“保存設(shè)置”,之后就可以正常訪問了。
展示 Post Type 的內(nèi)容
單純創(chuàng)建 Post Type 只是可以讓你輸入內(nèi)容,沒有什么意義,我們還需要在前臺輸出自定義 Post Type 的內(nèi)容。
自定義 Post Type 的模板和樣式
根據(jù) WordPress 的模板調(diào)用規(guī)則 我們可以得知,我們只需要創(chuàng)建 archive-[post_type].php 和 single-[post_type].php 就可以實現(xiàn)該 Post Type 的列表自定義和文章自定義。當(dāng)訪問 Post Type,WordPress 會優(yōu)先調(diào)用這些模板來渲染。
需要注意的是,你需要在注冊 Post Type 的時候設(shè)置 'has_archive' => true 才會有列表。
現(xiàn)在我們就把主題里自帶的 archive.php 和 single.php 文件復(fù)制一份命名為 archive-movie.php 和 single-movie.php,為了演示,這里我不做很多自定義,只是輸出導(dǎo)演信息表示一下。
我們分別在 L.56 和 L.23 附近的合適位置輸出 Meta Box 信息:
echo '導(dǎo)演:'.get_post_meta( get_the_ID(), '_movie_director', true );
然后刷新訪問電影列表和具體的電影就可以看到輸出的導(dǎo)演信息了。
這里只是舉個例子,實際中往往會自定義結(jié)構(gòu)和輸出的信息格式等,這里不再進(jìn)一步修改。這里不再麻煩演示了。
調(diào)用 WP_Query 高度自定義調(diào)用 Post Type 的內(nèi)容
上面操作依賴模板,如果需要高度自定義或者在頁面的某個模塊中調(diào)用列表,就需要用到 WP_Query 類來調(diào)用:
$args = array( 'post_type' => 'product', 'posts_per_page' => 10 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); the_title(); echo '<div class="entry-content">'; the_content(); echo '</div>'; endwhile;
查詢出來之后就跟常規(guī)的主循環(huán)一樣了,自定輸出結(jié)構(gòu)即可。
在首頁列表中顯示自定義 Post Type 的內(nèi)容
雖然我們自定義好了 Post Type 同時也編寫了一些內(nèi)容,但是在首頁的列表里面并沒有顯示出來。自定義的 Post Type 的內(nèi)容不會自動混入主循環(huán)里面。那如何讓自定義 Post Type 的內(nèi)容顯示出來?
你需要使用 pre_get_posts 這個 action 來做一些處理:
add_action( 'pre_get_posts', 'add_my_post_types_to_query' ); function add_my_post_types_to_query( $query ) { if ( is_home() && $query->is_main_query() ) $query->set( 'post_type', array( 'post', 'page', 'movie' ) ); return $query; }
在上面的 $query 變量里面設(shè)置的 post_type 數(shù)組就是要在主循環(huán)里面展示的內(nèi)容,將你的自定義 Post Type 填寫進(jìn)去就可以在首頁中顯示出來了。
設(shè)置自定義 Post Type 的固定連接
創(chuàng)建一個新的 Post Type 有時候也是為了更方便做 SEO,所以設(shè)置它的固定連接也非常重要。這里主要用到注冊 Post Type 的參數(shù)數(shù)組里面的 rewrite 參數(shù),常用以下幾兩項:
slug =》自定義固定連接結(jié)構(gòu)別名,默認(rèn)是使用 Post Type 名(例如本例的 movie),可以被翻譯。一般來說 Post Type 名可能與實際需要的 URL 不一樣( Post Type 為 movie,但 URL 可能需要 movies),就可使用該項自定義。
with_front =》 固定連接是否以根目錄為基礎(chǔ)路徑。如果你在固定連接設(shè)置頁面設(shè)置你的結(jié)構(gòu)為 /archives/,那么你的 Post Type 生成的連接默認(rèn)為 /archives/movie 如果設(shè)置該項為 false 即可去掉前面的 /archives/ 直接基于根路徑生成固定連接。
大功告成,但這只是 Post Type 最基礎(chǔ)的用法,Post Type 還有其他更高級的用法,更詳細(xì)的參數(shù)配置還需要你去進(jìn)一步挖掘來適應(yīng)你網(wǎng)站的功能需求。

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Terdapat empat cara untuk menyesuaikan senarai artikel WordPress: Gunakan pilihan tema, gunakan plugin (seperti pesanan jenis pos, senarai pos WP, barangan boxy), gunakan kod (tambah tetapan dalam fail fungsi.php), atau ubah suai pangkalan data WordPress secara langsung.

Reka bentuk pembangunan web adalah bidang kerjaya yang menjanjikan. Walau bagaimanapun, industri ini juga menghadapi banyak cabaran. Memandangkan lebih banyak perniagaan dan jenama beralih ke pasaran dalam talian, pemaju web mempunyai peluang untuk menunjukkan kemahiran mereka dan berjaya dalam kerjaya mereka. Walau bagaimanapun, apabila permintaan untuk pembangunan web terus berkembang, bilangan pemaju juga semakin meningkat, mengakibatkan persaingan yang semakin sengit. Tetapi ia menarik bahawa jika anda mempunyai bakat dan kehendak, anda sentiasa dapat mencari cara baru untuk membuat reka bentuk dan idea yang unik. Sebagai pemaju web, anda mungkin perlu terus mencari alat dan sumber baru. Alat dan sumber baru ini bukan sahaja menjadikan pekerjaan anda lebih mudah, tetapi juga meningkatkan kualiti kerja anda, dengan itu membantu anda memenangi lebih banyak perniagaan dan pelanggan. Trend pembangunan web sentiasa berubah.

Mengimport kod sumber WordPress memerlukan langkah-langkah berikut: Buat sub-tema untuk pengubahsuaian tema. Import kod sumber dan ganti rugi fail dalam sub-topik. Aktifkan sub-tema untuk menjadikannya berkesan. Uji perubahan untuk memastikan semuanya berfungsi.

Untuk membina laman web menggunakan hos WordPress, anda perlu: pilih penyedia hosting yang boleh dipercayai. Beli nama domain. Sediakan akaun hosting WordPress. Pilih topik. Tambah halaman dan artikel. Pasang pemalam. Sesuaikan laman web anda. Menerbitkan laman web anda.

Adakah anda ingin menyambungkan laman web anda ke alat webmaster Yandex? Alat webmaster seperti Google Search Console, Bing dan Yandex boleh membantu anda mengoptimumkan laman web anda, memantau lalu lintas, menguruskan robots.txt, periksa kesilapan laman web, dan banyak lagi. Dalam artikel ini, kami akan berkongsi cara menambah laman web WordPress anda ke alat Webmaster Yandex untuk memantau trafik enjin carian anda. Apa itu Yandex? Yandex adalah enjin carian popular yang berpusat di Rusia, sama seperti Google dan Bing. Anda boleh cemerlang dalam yandex

Adakah anda ingin tahu cara menggunakan kuki di laman web WordPress anda? Kuki adalah alat yang berguna untuk menyimpan maklumat sementara dalam pelayar pengguna. Anda boleh menggunakan maklumat ini untuk meningkatkan pengalaman pengguna melalui pemperibadian dan penargetan tingkah laku. Dalam panduan muktamad ini, kami akan menunjukkan kepada anda bagaimana untuk menetapkan, mendapatkan, dan memadam WordPresscookies seperti profesional. Nota: Ini adalah tutorial lanjutan. Ia memerlukan anda mahir dalam laman web HTML, CSS, WordPress dan PHP. Apa itu kuki? Kuki dicipta dan disimpan apabila pengguna melawat laman web.

Untuk membuat akaun di WordPress, hanya lawati laman webnya, pilih pilihan pendaftaran, isikan borang pendaftaran, dan sahkan alamat e -mel anda. Cara lain untuk mendaftar termasuk menggunakan akaun Google atau ID Apple. Manfaat mendaftar termasuk membuat laman web, mendapatkan ciri -ciri, menyertai komuniti, dan mendapat sokongan.

Adakah anda perlu membetulkan kesilapan muat naik imej HTTP di WordPress? Kesalahan ini boleh menjadi sangat mengecewakan apabila anda membuat kandungan dalam WordPress. Ini biasanya berlaku apabila anda memuat naik imej atau fail lain ke CMS anda menggunakan perpustakaan media WordPress terbina dalam. Dalam artikel ini, kami akan menunjukkan kepada anda bagaimana untuk membetulkan kesilapan muat naik imej HTTP di WordPress. Apakah sebab kesilapan HTTP semasa memuat naik media WordPress? Apabila anda cuba memuat naik fail ke WO menggunakan pemuat naik media WordPress
