之前,我們都有少量涉及到WP_Query的分類和標籤,不過我們並沒有詳細地向大家作解釋,這篇我們會為大家集中探討WP_Query分類和標籤的部分。在最後,我們亦都會提供較深入的使用方法給大家,讓大家能夠更充分地瞭解到它們的用法。
好,廢話少說我們立即開始吧
其實內裡有很多,是和文章,頁面的編碼是相近的,我們一起來看看吧
相信這已經不用多說了吧,不過大家應該還是不知道,放到WP_Query裡面,該是怎樣的模樣吧
$args = array(
//分類的
'cat' => '12, 13', //分類id
'category_name' => 'blog, post', //分類名稱
//標籤的
'tag_id' => '12, 13', //標籤id
'tag' => 'blog, post', //分類名稱
);
是不是和頁面或文章的,很相像呢,沒錯,其實就只是這麼簡單^^
這裡也同樣有著post_in和post_not_in類近的編碼,我們先來看分類先的吧
$args = array(
'category__and' => array( //需要包含列出的全部分類,才會顯示
'12',
'13',
'14'
)
'category__in' => array( //只要有包括其中一個分類,就會顯示
'12',
'13',
'14'
)
'category__not_in' => array( //只要包括內裡其中一個分類,就不會顯示
'12',
'13',
'14',
)
);
這些確實是看懂了,不過,假若你是希望顯示有分類id:12,13,14 的文章,但篩選出來的文章,只要是有分類id 15,就不會顯示出來,然後希望只顯示三篇文章,那麼我們可以怎樣做?
這情況,我們可以把category_in和category_not_in一起使用。我們先利用category_in,來篩選想要的文章分類,接著category_not_in,把不要的篩選出去,最後再用昨天使用過的:posts_per_page 來限制列出文章數目,這樣就能夠做到這效果了,比起想像中還要簡單吧
$args = array(
'category__in' => array(
'12',
'13',
'14'
)
'category__not_in' => array(
'15',
)
標籤有點有趣,除了像平常那樣,可以用id,來篩選需要的id外,這裡也是可以用名字的
$args = array(
'tag__and' => array( //需要包括列出的全部標籤,才會顯示
'12',
'13',
'14'
'tag__in' => array( //只要有包括其中一個標籤,就會顯示
'12',
'13',
'14'
'tag__not_in' => array( //只要有包括其中一個標籤,就不會顯示
'12',
'13',
'14'
'tag_slug__and' => array( //需要包括列出的全部標籤,才會顯示
'page 1'
'page 2'
'page 3'
'tag_slug__in' => array( //只要有包括其中一個標籤的名稱,就會顯示
'page 1'
'page 2'
'page 3'
)
);
老實說,這裡真的沒什麼特別,就只是不知為何,無故地在這裡,會可以使用標籤的名字,作為分類。
怎樣列出分類,對於大家來說,相信已經不難了,我們在這裡先把編碼放下來吧。
$args = array(
'category__in' => array(
'12',
'13',
'14',
)
'posts_per_page' => 3,
'type' => 'post'
)
不過這裡有一個問題,系統只會把這三個分類的文章篩選出來,然後再用posts_per_page選出三篇最新的文章,換句話說,系統並不會理會是不是同一個分類,只要是最新,它就會放出來,這和我們的原意有點距離。
當然你可以把每個分類,都獨立弄成一個loop,,然後再用category__in和 posts_per_page ,來顯示那分類的最新文章。但假若這裡有30個分類,那麼你豈不是要重複這動作30次了嗎?這既不明智,也浪費你的時間。
那麼我們可以怎樣做呢? 我們可以加入額外編碼,來做到這效果:
<?php
$arg_cat = array(
'include' => '12,13,14'
);
$categories = get_categories($arg_cat);
foreach($categories as $category):
$args = array(
'category__in' => $category->term_id,
'posts_per_page' => 1,
'type' => 'post'
);
$lastpage = new WP_Query( $args );
if($lastpage->have_posts()):
while($lastpage-> have_posts()): $lastpage->the_post();?>
<?php get_template_part('include/content');?>
<?php endwhile; endif; wp_reset_postdata(); endforeach; ?>
我們這裡做的其實,就和我們人手重複30次去製作一個新loop是一樣,只是我們把這一切,交給了電腦處理,而不是,人手慢慢列出來。
我們需要告訴系統,這個之後的loop,應該去找什麼分類來產生的,所以我們在這裡,用include設定了,12,13,14這三個數字,這樣系統就會知道,它是要找id,12,13,14,這三個分類。
雖說是這樣但系統其實並不知道他是要到那裡找的,所以我們需要加入get_categories,來跟系統說,我們是要找分類裡面,這三個id,這樣系統就會找取了這些分類的內容了。我們這裡同時也設定了個代號$categories給他,這樣方便我們在下方使用。
到這裡大家可以嘗試 var_dump($categories) 來查看一下編碼(當然$categories是看你在get_categories怎樣設定吧),假如沒錯的話,你會看到他是顯示了一大堆編碼出來的,並不單單只有id。
這一點非常重要,因為這意味著,我們之後是需要指令wordpress,只提取id部分,那麼才能夠套用到,category_in裡面,因為category_in是必需要用分類的id,我想這點大家應該還記得吧。
不過我們還沒有令到他會懂得自己重複去列印出來,讓整個事情能夠順利運行。這裡,我們可以利用到foreach,這個php的loop,之前我們也有使用過的,不過不記得也不緊要,這裡再為大家解釋一次吧foreach可以說是我們平常用的,要來列出文章的精簡版,他會無條件地不斷運行,直到運行完才會結束
例如 :
<?php
$arg =array( "1" , "2" , "3" );
foreach ($arg as $value ){
echo 'a='.$value;
}
那麼他就會這樣:a=1a=2a=3
你會留意到他不但是重複著顯示哪些我們設定好的數字,也同時會重複列印a=出來,直到列完所有數值,所以這就是為什麼我會說,這樣做能夠代替你人手重複輸入30次這沉悶的過程了。我們這裡也加入了$categories as $category,這在foreach裡面,是必需要加入的,後方設定了的代號,才能用到loop內裡
看到例子,應該會知道,我們需要把我們設定好的值,放進去一組編碼裏,讓這個loop能夠正式運行,既然我們是要列出文章, 那麼當然就是把整個文章的loop都放進去。WP_Query也需要放進去,這樣文章loop,才會按照分類去顯示出來。
不過我們希望分類能夠用到我們上方設定好的,我們在這裡加入$category,讓他知道需要跟從那裡。另外因為include是會出了大量我們用不著的編碼,所以我們使用了term_id,讓wordpress只會提取id部份。
好了這樣就完成了,希望大家能跟上吧。
希望這篇文章,能夠幫助到大家,對於WP_Query,有一個初步的認識,也能夠初步地體會到,是可以怎樣應用吧。
對了,最後那個雖然真的有點複雜,不過大家只要用到商店分類,文章分類之類,也是蠻常用到的,除了顯示文章內容,你也可以選擇是利用post=attachment,來顯示每個分類的最新商品圖片/文章圖片,若能夠了解了,對你的幫助也是不少。
好這篇,就到這裡了,下篇文章見。