目錄
因此,我們需要一個文章系列,這實際上是一個以串行方式包含其他帖子的帖子。
可以隨時評論您對下面插件的經歷。
> POST系列插件與標準WordPress類別和標籤有何不同?
,而WordPress類別和標籤確實允許您將相關的帖子分組在一起,但它們缺乏帖子系列插件提供的順序結構。使用Post系列插件,您可以以特定的順序訂購帖子,從而使讀者更容易遵循故事情節或結構化的學習路徑。
我可以在WordPress網站上創建多個帖子系列嗎?您可以根據需要創建盡可能多的帖子系列。這對於涵蓋多個主題或具有不同類型的序列化內容的網站特別有用。
我可以在多作者WordPress網站上使用帖子系列插件嗎? >
是的,有幾個免費的帖子系列可用於WordPress的插件。但是,請記住,免費插件可能不會提供像高級插件一樣多的功能或支持。始終選擇一個最適合您需求和預算的插件。
首頁 CMS教程 &#&按 為WordPress創建帖子插件

為WordPress創建帖子插件

Feb 18, 2025 pm 12:09 PM

為WordPress創建帖子插件

> WordPress Post系列插件使您能夠串行組織帖子以創建書籍或課程。它為用戶提供了學習的途徑。帖子系列插件也可以用來將長帖子分為多個部分。

> 在本教程中,我將向您展示如何創建一個用於顯示一系列帖子的插件。您還可以將相同的代碼集成到主題功能中。

>

鑰匙要點

    >利用自定義帖子類型,而不是自定義分類法來有效地創建和管理WordPress的帖子系列,增強用戶體驗和內容組織。
  • >實現具有PHP文件和可選CSS的插件結構,可確保WordPress識別並正確安裝您的自定義插件。
  • 在WordPress管理中包括元框,以允許作者將帖子分配給特定的系列並串行訂購,從而改善該系列的結構完整性。
  • >通過使用“ Pre_get_posts”操作修改主查詢循環,在您的網站上擴展了Post系列的可見性,確保串聯的索引和存檔頁麵包括。
  • >通過將導航鏈接添加到上一個和下一個帖子,提高用戶參與度和每個訪問者的頁面視圖,來增強系列中的單個帖子。
  • >分類學與帖子系列
在WordPress中,分類法用於將類似的帖子分組或組織類似的帖子。但是WordPress並沒有提供一種以定制的序列方式顯示特定分類法的所有帖子。 WordPress分類法是使用Archive.php文件顯示的,因此我們不能創建一個帖子系列作為單個,可索引的帖子。

因此,我們需要一個文章系列,這實際上是一個以串行方式包含其他帖子的帖子。

>

如何創建帖子系列

>創建帖子系列有許多不同的方法。在WordPress.org上找到的流行帖子系列插件使用WordPress帖子上的自定義分類法來創建帖子系列,但是在本教程中,我將使用自定義帖子類型。

插件文件結構

>創建一個名為SitePoint-Post系列的插件目錄並將兩個文件放在此中,名為SitePoint-Post-series.php和sitepoint-post-series.css.css.

>在sitepoint-post series.php文件中,將代碼放在下面,以便WordPress識別目錄為插件,並讓您安裝它。

>您還可以將POST系列功能添加到主題。在這種情況下,您需要在本教程中的所有代碼,主題的functions.php file。

如何創建帖子系列自定義帖子類型

首先,我們需要創建一個自定義帖子類型,其中每個自定義帖子類型代表帖子系列。 >

>將下面的代碼放在名為sitepoint-post series.php的文件中

<span><span>&lt;?php
</span></span><span>
</span><span><span>/*
</span></span><span><span>Plugin Name: SitePoint Post Series
</span></span><span><span>Plugin URI: https://www.sitepoint.com/
</span></span><span><span>Description: This used is used to create a post series.
</span></span><span><span>Version: 1.0
</span></span><span><span>Author: Narayan Prusty
</span></span><span><span>*/</span></span>
登入後複製
登入後複製

>在這裡,我們創建了一種自定義帖子類型,該類型具有與WordPress帖子使用的相同分類法。這樣您也可以創建一個類別帖子系列。

>

>我們還添加了激活和停用鉤子以齊平的重寫規則。這是為了使帖子系列可以在前端查看。

>

這是我們的自定義帖子類型在管理屏幕上的外觀:

為WordPress創建帖子插件>在帖子中添加一個帖子元盒

現在,我們需要將元框添加到WordPress帖子admin接口。因此,作者可以將帖子附加到帖子系列中,並提供序列號以對帖子系列中的帖子進行分類。

這是在帖子系列中添加元框的代碼:

在這裡,我們在元框中添加了兩個字段。作者使用文本字段輸入序列號,並使用下拉列表來選擇帖子所屬的帖子名稱。如果您不想將帖子添加到帖子系列中,則應將一個或兩個字段留為空白。
<span>function sitepoint_post_series_custom_post_type()
</span><span>{
</span>	<span>register_post_type("sitepoint-postseries", array(
</span>			<span>"labels" =&gt; array("name" =&gt; __("Post Series"), "singular_name" =&gt; __("Post Series")),
</span>			<span>"public" =&gt; true, 
</span>			<span>"has_archive" =&gt; true,
</span>			<span>"rewrite" =&gt; array("slug"=&gt; "post-series"),
</span>			<span>"supports" =&gt; array("editor", "title", "excerpt", "thumbnail", "comments"),
</span>			<span>"capability_type" =&gt; "post",
</span>			<span>"publicly_queryable" =&gt; true,
</span>			<span>"taxonomies" =&gt; array("category", "post_tag"),
</span>		<span>)
</span>	<span>);
</span><span>}	
</span>
<span>add_action("init", "sitepoint_post_series_custom_post_type", 2);
</span>
<span>/* Flush Rewrite Rules */
</span>
<span>function sitepoint_post_series_activation()
</span><span>{
</span>	<span>sitepoint_post_series_custom_post_type();
</span>	<span>flush_rewrite_rules();
</span><span>}
</span>
<span>register_activation_hook( __FILE__, "sitepoint_post_series_activation");
</span><span>register_deactivation_hook( __FILE__, "sitepoint_post_series_activation");</span>
登入後複製
登入後複製
這是在管理郵政屏幕上的外觀:

現在,我們需要在保存表單時保存元框字段。這是這樣做的代碼:

為WordPress創建帖子插件

>在這裡我們保存元框內容,然後調用函數sitepoint_post_series_series_series_series_save_settings具有不同的參數值,具體取決於用戶是刪除系列,添加系列或更改系列。

這是sitepoint_post_series_save_settings函數
/* Add Custom Meta Boxes in WordPress Posts */

function sitepoint_post_series_meta_box_markup($object)
{
	wp_nonce_field(basename(__FILE__), "sitepoint-postseries");

	?&gt;
		<span><span><span>&lt;div</span>&gt;</span>
</span>			<span><span><span>&lt;label</span> for<span>="sitepoint-postseries-serial-number"</span>&gt;</span>Serial Number<span><span>&lt;/label</span>&gt;</span>
</span>            <span><span><span>&lt;br</span>&gt;</span>
</span>            <span><span><span>&lt;input</span> name<span>="sitepoint-postseries-serial-number"</span> type<span>="text"</span> value<span>="<span>&lt;?php echo get_post_meta($object-&gt;ID, "sitepoint-postseries-serial-number", true); ?&gt;</span>"</span>&gt;</span>
</span>
            <span><span><span>&lt;br</span>&gt;</span>
</span>
            <span><span><span>&lt;label</span> for<span>="sitepoint-postseries-id"</span>&gt;</span>Name<span><span>&lt;/label</span>&gt;</span>
</span>            <span><span><span>&lt;br</span>&gt;</span>
</span>            <span><span><span>&lt;select</span> name<span>="sitepoint-postseries-id"</span>&gt;</span>
</span>            	<span><span><span>&lt;option</span> value<span>=""</span>&gt;</span>-<span><span>&lt;/option</span>&gt;</span>
</span>            	<span><span>&lt;?php
</span></span><span>            		<span>$posts = get_posts("post_type=sitepoint-postseries");
</span></span><span>            		<span>$selected_series = get_post_meta($object-&gt;ID, "sitepoint-postseries-id", true);
</span></span><span>            		<span>foreach($posts as $post) 
</span></span><span>            		<span>{
</span></span><span>            			<span>$id_post = $post-&gt;ID; 
</span></span><span>            			<span>if($id_post == $selected_series)
</span></span><span>            			<span>{
</span></span><span>	            			<span>?&gt;</span>
</span>	            				<span><span><span>&lt;option</span> selected value<span>="<span>&lt;?php echo $post-&gt;ID; ?&gt;</span>"</span>&gt;</span><span>&lt;?php echo $post-&gt;post_title; ?&gt;</span><span><span>&lt;/option</span>&gt;</span>	
</span>	            			<span><span>&lt;?php
</span></span><span>            			<span>}
</span></span><span>            			<span>else
</span></span><span>            			<span>{
</span></span><span>	            			<span>?&gt;</span>
</span>	            				<span><span><span>&lt;option</span> value<span>="<span>&lt;?php echo $post-&gt;ID; ?&gt;</span>"</span>&gt;</span><span>&lt;?php echo $post-&gt;post_title; ?&gt;</span><span><span>&lt;/option</span>&gt;</span>	
</span>	            			<span><span>&lt;?php	
</span></span><span>            			<span>}
</span></span><span>		            <span>}
</span></span><span>            	<span>?&gt;</span>	
</span>            <span><span><span>&lt;/select</span>&gt;</span>
</span>        <span><span><span>&lt;/div</span>&gt;</span>
</span>	<span><span>&lt;?php
</span></span><span><span>}
</span></span><span>
</span><span><span>function sitepoint_post_series_custom_meta_box()
</span></span><span><span>{
</span></span><span>	<span>add_meta_box("sitepoint-postseries", "Post Series", "sitepoint_post_series_meta_box_markup", "post", "side", "low", null);
</span></span><span><span>}
</span></span><span>
</span><span><span>add_action("add_meta_boxes", "sitepoint_post_series_custom_meta_box");</span></span>
登入後複製
的代碼

此函數創建一個字符串,該字符串存儲屬於特定係列的WordPress Post ID。然後將字符串作為WordPress設置存儲。

>現在我們完成了所有管理區域代碼。您現在應該能夠創建帖子並將其分配給系列。並且還為每個系列分配類別和標籤。
<span>/* Callback to Save Meta Data */
</span>
<span>function sitepoint_post_series_save_custom_meta_box($post_id, $post, $update)
</span><span>{
</span>
	<span>if(!isset($_POST["sitepoint-postseries"]) || !wp_verify_nonce($_POST["sitepoint-postseries"], basename(__FILE__)))
</span>		<span>return $post_id;
</span>
	<span>if(!current_user_can("edit_post", $post_id))
</span>		<span>return $post_id;
</span>
	<span>if(defined("DOING_AUTOSAVE") &amp;&amp; DOING_AUTOSAVE)
</span>		<span>return $post_id;
</span>
	<span>$slug = "post";
</span>	<span>if($slug != $post-&gt;post_type)
</span>        <span>return;
</span>
	<span>$serial_number = null;
</span>	<span>if(isset($_POST["sitepoint-postseries-serial-number"]))
</span>    <span>{
</span>        <span>$serial_number = $_POST["sitepoint-postseries-serial-number"];
</span>    <span>}
</span>    <span>else
</span>    <span>{
</span>    	<span>$serial_number = "";
</span>    <span>}
</span>    <span>update_post_meta($post_id, "sitepoint-postseries-serial-number", $serial_number);
</span>
	<span>$series_id = null;
</span>	<span>if(isset($_POST["sitepoint-postseries-id"]))
</span>    <span>{
</span>        <span>$series_id = $_POST["sitepoint-postseries-id"];
</span>    <span>}
</span>    <span>else
</span>    <span>{
</span>    	<span>$series_id = "";
</span>    <span>}
</span>
    <span>$previous_series_id = get_post_meta($post_id, "sitepoint-postseries-id", true);
</span>
    <span>update_post_meta($post_id, "sitepoint-postseries-id", $series_id);
</span>
    <span>//no series, removing series, adding new series or changing series
</span>
    <span>if($previous_series_id == "" &amp;&amp; $series_id == "")
</span>    <span>{
</span>    	<span>sitepoint_post_series_save_settings($series_id, $serial_number, $post_id);
</span>    <span>}
</span>    <span>else if($previous_series_id != "" &amp;&amp; $series_id == "")
</span>    <span>{
</span>    	<span>sitepoint_post_series_save_settings($previous_series_id, "", $post_id);	
</span>    <span>}
</span>    <span>else if($previous_series_id == "" &amp;&amp; $series_id != "")
</span>    <span>{
</span>    	<span>sitepoint_post_series_save_settings($series_id, $serial_number, $post_id);
</span>    <span>}
</span>    <span>else if($previous_series_id != "" &amp;&amp; $series_id != "")
</span>    <span>{
</span>    	<span>sitepoint_post_series_save_settings($previous_series_id, "", $post_id);
</span>    	<span>sitepoint_post_series_save_settings($series_id, $serial_number, $post_id);	
</span>    <span>}    
</span><span>}
</span>
<span>add_action("save_post", "sitepoint_post_series_save_custom_meta_box", 10, 3);</span>
登入後複製

現在,讓我們編碼前端以顯示帖子系列。 > 在索引頁面和存檔頁面上可見

索引類型在索引和存檔頁面中尚不可見。為了使其在這些頁面上可見,您只需要添加以下代碼:>

>在這裡,我們使用pre_get_posts掛鉤將帖子系列添加到$ q變量,主循環使用該帖子顯示帖子。

顯示帖子系列

的帖子

我們需要過濾帖子類型的內容,並添加屬於該系列的帖子。

這是在帖子系列頁面中添加帖子系列的帖子的代碼。

<span>/* Store WordPress posts and Post Series CTY relations as WordPress Settings. */
</span>
<span>function sitepoint_post_series_save_settings($series_id, $serial_number, $post_id)
</span><span>{
</span>    <span>if($series_id != "" &amp;&amp; $serial_number != "")
</span>    <span>{
</span>	    <span>$post_series_list = get_option("post_series_" . $series_id . "_ids", "");
</span>
	    <span>if($post_series_list == "")
</span>	    <span>{
</span>	    	<span>$post_series_list_array = array($post_id);
</span>	    	<span>$post_series_list = implode (", ", $post_series_list_array);
</span>
	    	<span>update_option("post_series_" . $series_id . "_ids", $post_series_list);
</span>	    <span>}
</span>	    <span>else
</span>	    <span>{
</span>	    	<span>$post_series_list_array = explode(',', $post_series_list);
</span>
	    	<span>if(in_array($post_id, $post_series_list_array))
</span>	    	<span>{
</span>	    		<span>//do nothing
</span>	    	<span>}
</span>	    	<span>else
</span>	    	<span>{
</span>	    		<span>$post_series_list_array[] = $post_id;
</span>	    		<span>$post_series_list = implode (", ", $post_series_list_array);
</span>	    		<span>update_option("post_series_" . $series_id . "_ids", $post_series_list);
</span>	    	<span>}
</span>	    <span>}
</span>    <span>}
</span>    <span>else if($series_id == "" || $serial_number == "")
</span>    <span>{
</span>    	<span>$post_series_list = get_option("post_series_" . $series_id . "_ids", "");
</span>
    	<span>if($post_series_list == "")
</span>    	<span>{
</span>    	<span>}
</span>    	<span>else
</span>    	<span>{
</span>    		<span>$post_series_list_array = explode(',', $post_series_list);
</span>
    		<span>if(in_array($post_id, $post_series_list_array))
</span>    		<span>{
</span>    			<span>//here remove the post id from array.
</span>    			<span>if(($key = array_search($post_id, $post_series_list_array)) !== false) {
</span>				    <span>unset($post_series_list_array[$key]);
</span>				<span>}
</span>    			<span>$post_series_list = implode (", ", $post_series_list_array);
</span>	    		<span>update_option("post_series_" . $series_id . "_ids", $post_series_list);
</span>	    	<span>}
</span>    		<span>else
</span>    		<span>{
</span>    		<span>}
</span>    	<span>}
</span>    <span>}
</span><span>}</span>
登入後複製
這將使用HTML無序列表標籤顯示帖子。對於沒有圖像的帖子,我們正在加載Lorempixel Cloud Service的圖像來生成隨機紋理圖像。

>我們正在從設置字符串中檢索文章系列的帖子,我們在節省元數據時保存了帖子。

>將帖子系列信息添加到帖子

>我們還可以在屬於帖子系列的帖子上添加一個帖子系列框,以向用戶表明該帖子屬於特定的帖子系列。這是執行此操作的代碼:

<span><span>&lt;?php
</span></span><span>
</span><span><span>/*
</span></span><span><span>Plugin Name: SitePoint Post Series
</span></span><span><span>Plugin URI: https://www.sitepoint.com/
</span></span><span><span>Description: This used is used to create a post series.
</span></span><span><span>Version: 1.0
</span></span><span><span>Author: Narayan Prusty
</span></span><span><span>*/</span></span>
登入後複製
登入後複製
在這裡,我們只是顯示一個帖子名稱,本文的哪一部分來自該系列。

>您還可以使用以下實現sitepoint_post_series_post_content_filter函數添加該系列的下一篇和上一篇文章:

此實現的問題是,該代碼擊中了MySQL的次數,等於系列中的帖子數量。如果您有很多特定文章系列的帖子,則存在性能問題,但我出於教育目的包​​括了它。
<span>function sitepoint_post_series_custom_post_type()
</span><span>{
</span>	<span>register_post_type("sitepoint-postseries", array(
</span>			<span>"labels" =&gt; array("name" =&gt; __("Post Series"), "singular_name" =&gt; __("Post Series")),
</span>			<span>"public" =&gt; true, 
</span>			<span>"has_archive" =&gt; true,
</span>			<span>"rewrite" =&gt; array("slug"=&gt; "post-series"),
</span>			<span>"supports" =&gt; array("editor", "title", "excerpt", "thumbnail", "comments"),
</span>			<span>"capability_type" =&gt; "post",
</span>			<span>"publicly_queryable" =&gt; true,
</span>			<span>"taxonomies" =&gt; array("category", "post_tag"),
</span>		<span>)
</span>	<span>);
</span><span>}	
</span>
<span>add_action("init", "sitepoint_post_series_custom_post_type", 2);
</span>
<span>/* Flush Rewrite Rules */
</span>
<span>function sitepoint_post_series_activation()
</span><span>{
</span>	<span>sitepoint_post_series_custom_post_type();
</span>	<span>flush_rewrite_rules();
</span><span>}
</span>
<span>register_activation_hook( __FILE__, "sitepoint_post_series_activation");
</span><span>register_deactivation_hook( __FILE__, "sitepoint_post_series_activation");</span>
登入後複製
登入後複製
將我們的插件與其他帖子系列插件進行比較

>這是WordPress.org上的一些插件,使您可以創建一個帖子系列。我已經將每個插件與上面創建的插件進行了比較。

>

組織系列:組織系列為WordPress帖子添加了自定義分類法。當您查看自定義分類法時,它會添加到存檔頁面的標題,這似乎是郵政系列的標題。帖子系列中的帖子像分類法一樣顯示,從用戶角度來看,這可能不是很好。相比之下,我們的插件使用自定義帖子類型顯示單個帖子系列,以便您可以將特色圖像,文本或標記內容(以及更多)添加到帖子系列中。與我們的插件中的存檔頁面相比,帖子系列的帖子看起來不同。

> WP Post系列:這也像組織系列插件一樣。一個區別是,它沒有為郵政系列頁面提供任何自定義。
    >
  1. 我們的插件高度可自定義,不包含任何WordPress黑客攻擊。因此,它更加兼容。
  2. >
  3. 結論

如果您擁有開發博客,則可以使用此插件來創建自己的帖子系列,從而提高您的參與度和轉化率。您甚至可以使用它將大型帖子分為多個帖子。

可以隨時評論您對下面插件的經歷。

>

經常詢問有關為WordPress創建帖子插件的問題

什麼是帖子系列插件,為什麼我需要它的WordPress網站?

> post系列插件是一種允許您將相關帖子分組為系列的工具。這對於以序列化格式發佈內容的博客或網站特別有用。它通過使讀者更容易瀏覽相關內容來增強用戶體驗。它還有助於改善網站的SEO,因為搜索引擎偏愛結構良好的結構鏈接內容。

>

> POST系列插件與標準WordPress類別和標籤有何不同?

>

,而WordPress類別和標籤確實允許您將相關的帖子分組在一起,但它們缺乏帖子系列插件提供的順序結構。使用Post系列插件,您可以以特定的順序訂購帖子,從而使讀者更容易遵循故事情節或結構化的學習路徑。

>

我可以自定義我的文章的外觀和感覺網站?

是的,大多數帖子系列插件都提供自定義選項。您可以更改佈局,顏色,字體和其他設計元素,以匹配您網站的整體美學。一些插件還允許您添加自定義CSS以進行更高級的自定義。

創建帖子系列如何影響我的網站的SEO?

>創建帖子系列可以顯著改善您的網站SEO。通過將相關帖子分組在一起,您可以創建一個搜索引擎喜歡的內部鏈接網絡。它還增加了您網站上的停留時間,因為讀者更有可能閱讀系列中的多個帖子。

我可以在WordPress網站上創建多個帖子系列嗎?您可以根據需要創建盡可能多的帖子系列。這對於涵蓋多個主題或具有不同類型的序列化內容的網站特別有用。

可以在發布之後將帖子添加到系列中?隨時隨地的新帖子。大多數帖子系列插件都允許您輕鬆管理和更新系列,確保您的內容保持相關和最新。

我可以在多作者WordPress網站上使用帖子系列插件嗎? >

是的,可以在多作者站點上使用後插件。它可以是管理和組織來自多個作者的內容的絕佳工具,確保所有帖子的一致性和連貫性。

我是否需要編碼技能來在WordPress上創建帖子系列?您不需要任何編碼技能就可以在WordPress上創建帖子系列。大多數帖子系列插件都帶有一個用戶友好的界面,可以輕鬆創建和管理您的系列。

我可以使用我現有的WordPress主題的Post系列插件嗎? Post Series插件旨在與任何WordPress主題無縫合作。但是,最好檢查插件的文檔或與開發人員聯繫以確認。

>

是否有免費的帖子系列插件可用於WordPress?

是的,有幾個免費的帖子系列可用於WordPress的插件。但是,請記住,免費插件可能不會提供像高級插件一樣多的功能或支持。始終選擇一個最適合您需求和預算的插件。

>

以上是為WordPress創建帖子插件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

WordPress開發的5個最佳ID(以及原因) WordPress開發的5個最佳ID(以及原因) Mar 03, 2025 am 10:53 AM

WordPress開發的5個最佳ID(以及原因)

使用OOP技術創建WordPress插件 使用OOP技術創建WordPress插件 Mar 06, 2025 am 10:30 AM

使用OOP技術創建WordPress插件

如何將PHP數據和字符串傳遞給WordPress中的JavaScript 如何將PHP數據和字符串傳遞給WordPress中的JavaScript Mar 07, 2025 am 09:28 AM

如何將PHP數據和字符串傳遞給WordPress中的JavaScript

如何使用WordPress插件嵌入和保護PDF文件 如何使用WordPress插件嵌入和保護PDF文件 Mar 09, 2025 am 11:08 AM

如何使用WordPress插件嵌入和保護PDF文件

See all articles