到目前為止,在本系列中,您已經了解了可以與WP_Query
類別一起使用的參數選擇,以按帖子類型、類別、標籤、元資料、日期、狀態等選擇帖子更多。
在關於 WP_Query
參數的最後一個教學中,我將介紹一些不常用的參數,這些參數可以為您的查詢提供更大的靈活性。
我們將在此處介紹的參數用於:
在開始之前,讓我們快速回顧一下如何使用 WP_Query
編寫參數。
#當您在主題或外掛程式中編寫 WP_Query
時,您需要包含四個主要元素:
實際上,這將類似於以下內容:
<?php $args = array( // Arguments for your query. ); // Custom query. $query = new WP_Query( $args ); // Check that we have query results. if ( $query->have_posts() ) { // Start looping over the query results. while ( $query->have_posts() ) { $query->the_post(); // Contents of the queried post results go here. } } // Restore original post data. wp_reset_postdata(); ?>
這些參數告訴 WordPress 從資料庫中取得哪些數據,我將在此處介紹這些數據。所以我們在這裡關注的是程式碼的第一部分:
$args = array( // Arguments for your query. );
如您所見,參數包含在一個陣列中。在學習本教程時,您將學習如何對它們進行編碼。
#數組中的參數有一個具體的編碼方式,如下:
$args = array( 'parameter1' => 'value', 'parameter2' => 'value', 'parameter3' => 'value' );
必須將參數及其值括在單引號中,在它們之間使用 =>
,並用逗號分隔它們。如果您犯了這個錯誤,WordPress 可能不會將所有參數新增到查詢中,否則您可能會看到白螢幕。
有四個參數可以用來按作者查詢:
author
(int):使用作者 IDauthor_name
(字串):使用「user_nicename」(不是名稱)author__in
(陣列):使用作者 IDauthor__not_in
(陣列)第一個 author
允許您透過提供作者 ID 來查詢一個或多個作者的貼文:
$args = array( 'author' => '2' );
上面的程式碼查詢ID為2
的作者的所有貼文。
您也可以使用字串來查詢多個作者的貼文:
$args = array( 'author' => '1, 2' );
如果要按名稱查詢,可以使用 author_name
參數:
$args = array( 'author_name' => 'rachelmccollin' );
此參數採用資料庫中 user_nicename
欄位的值作為其參數,該值在使用者管理畫面中顯示為暱稱:
請注意,由於使用者可以編輯此內容,因此使用 author
會更安全參數(如果您認為您的使用者可能會變更它)。
您也可以查詢一系列作者的貼文:
$args = array( 'author__in' => array( '1', '2' ) );
上面將查詢兩位作者的帖子: ID 為 1
和 2
的作者,給出的結果與我在 author
參數上面。
最後,您可以使用 author__not_in
參數排除一位或多位作者的貼文。下面的參數查詢除作者 1
之外的所有貼文:
$args = array( 'author__not_in' => array( '1' ) );
或您可以排除多個作者:
$args = array( 'author__not_in' => array( '1', '2' ) );
或者,您可以使用 author
參數,並在作者 ID 前面使用減號來排除作者:
$args = array( 'author' => '-2' );
搜尋的參數只有一個,就是s
。使用它來查詢與搜尋字詞相符的帖子。例如,要查詢包含關鍵字“我最喜歡的食物”的帖子,您可以使用:
$args = array( 's' => 'my favorite food' );
例如,您可能會發現這對於搜尋具有相似關鍵字的相關貼文很有用。
您可以使用兩個密碼參數來查詢有或沒有密碼保護的貼文:
has_password
(bool)post_password
(字串)#第一個參數 has_password
允許您查詢有或沒有密碼保護的貼文。因此,請查詢受密碼保護的貼文:
$args = array( 'has_password' => true );
對於沒有密碼的貼文:
$args = array( 'has_password' => false );
您也可以透過密碼本身進行查詢,使用 post_password
參數:
$args = array( 'post_password' => 'mypassword' );
權限只有一個參數,perm
,用來查詢目前使用者有權限閱讀的貼文。它採用 'readable'
值,旨在與其他參數結合使用。
因此,要查询受密码保护的帖子并仅在用户具有适当权限时才显示它们,您可以使用以下命令:
$args = array( 'has_password' => true, 'perm' => 'readable' );
或者,如果当前用户有权查看草稿帖子,则可以使用以下命令:
$args = array( 'post_status' => 'draft', 'perm' => 'readable' );
共有三个缓存参数,它们会阻止查询检索到的数据添加到缓存中:
cache_results
(boolean):帖子信息缓存update_post_meta_cache
(boolean):发布元信息缓存update_post_term_cache
(boolean):帖子术语信息缓存这三个选项的默认值都是 true
:如果您希望将数据添加到缓存中,则不需要使用它们。
因此,要显示 product
帖子类型的所有帖子,但不将帖子信息添加到缓存中,您可以使用以下命令:
$args = array( 'post_type' => 'product', 'cache_results' => false );
通常您不应该使用这些参数,因为将发布数据添加到缓存是一个很好的做法。但是,您有时可能希望检索帖子,以便只使用一些帖子数据,在这种情况下,您不需要缓存中的其余帖子数据。例如,当您只想输出带有链接的帖子标题列表时,在这种情况下,您不需要将帖子术语数据或元数据添加到缓存中:
$args = array( 'post_type' => 'product', 'update_post_meta_cache' => false, 'update_post_term_cache' => false );
您可以使用 fields
参数来指定从查询中返回哪些字段。这可以节省从数据库中的字段返回的数据,而在循环中输出数据时不需要这些数据。
默认情况下是返回所有字段,但是您有两个选项可以使用 fields
参数来限制这一点。首先,'ids'
参数:
$args = array( 'fields' => 'ids' );
这只会返回帖子 ID 数组,不会返回其他字段。如果您想在循环中输出任何内容(例如帖子标题),则必须使用 get_the_title ($post->ID);
等函数来输出标题,这将处理事情的方式很冗长。
您可以使用的另一个参数获取帖子 ID 与子帖子 ID 的关联数组:
$args = array( 'fields' => 'id=>parent' );
您可以使用它根据您的其他参数及其子参数查询帖子。
WP_Query
系列的这一部分介绍了 WP_Query
类的最终参数集。您可以使用它们按作者、密码保护状态或密码本身和搜索词查询帖子,并设置是否将查询结果添加到缓存以及查询返回哪些字段。
在本系列的下一部分中,您将看到一些在主题或插件中使用 WP_Query
的有效示例。
以上是WP_Query參數:作者、搜尋、密碼和權限的詳細內容。更多資訊請關注PHP中文網其他相關文章!