这里有一个基于单一分类法的替代方法。php文件。
总之,在分类法开始时调用函数。php。该函数计算分类法url并确定应用哪个自定义分类法(如果有)。然后它就会ALL the terms 对于该分类法(不仅仅是url中的分类法),然后获取ALL the posts 这些术语引用。此时,您可以添加代码以按照自己的意愿格式化自定义分类法帖子,或者(如果没有自定义分类法帖子)允许分类法。php照常接管并格式化帖子。在我的(测试过的)示例中,函数进入函数。php,但如果您愿意,可以将其放入插件中。
我创建了两个自定义分类(“颜色”和“位置”)。为了测试的销售,我已经将论文硬编码到函数中的一个数组中,但这种方法有很多替代方法。我的意图是表明这可以通过编程实现,而无需创建众所周知的“101分类文件”。
我创建了分类法。通过创建一个空白文件,将其保存为“分类法”。然后复制归档文件的内容。php。在我的测试中,我只打印了术语帖子的标题(以证明帖子信息已被检索),但您可以随意更改。
在屏幕快照中,您可以看到url为“location/sydney”。标准分类页面在屏幕底部显示两个“Sydney”帖子,但该功能包括一个额外帖子(显示在页面顶部),用于location=“Melbourne”。
我的自定义分类法数组(我的变量名为$myarrayoptions)只有两个自定义分类法(slug是“color”和“location”),但这可以是任意的。我做了一个假设:每个帖子只有一个自定义分类法。同样,每个帖子都有处理多个分类法的方法,但这足以用于演示目的。
这是我在函数中的函数。php。我在所有的“echo”语句中都留下了用于调试的内容,您可以在空闲时删除这些内容。
/*
* Create function to set if custom taxonomy is set
*/
function checktax(){
global $wp;
//echo "<p>TESTING - START</p>";
// create a simple array showing the name of all the referenced custom taxonomies
$myarrayoptions = array(\'color\',\'location\');
//echo "the custom taxonomies are <pre>";print_r($myarrayoptions);echo "</pre>"; //DEBUG
// get the url
$myurl = home_url( $wp->request );
//echo "<p>The url is ".$myurl." </p>"; //DEBUG
// Explode the url to get access to the taxonomy and terms
$pageterms = explode(\'/\', $myurl);
//echo "the exploded components of the URL <pre>";print_r($pageterms);echo "</pre>"; //DEBUG
// check whether any custom taxonomies are included in the page url and then do stuff
if (array_intersect($pageterms,$myarrayoptions)) {
// find which custom taxonomy is in the url - there should only be ONE!
$result = array_intersect($pageterms,$myarrayoptions);
//echo "the custom taxonomy is <pre>";print_r($result);echo "</pre>"; //DEBUG
// get the value of the custom taxonomy. this is very clumsy but it does work.
foreach ($result as $key => $value){
//echo "<p>the array key is ".$key." and the taxonomy is ".$value."</p>"; //DEBUG
}
// echo "<p>the taxonomy is ".$value."</p>"; //DEBUG
// the term in the URL is the field after the taxonomy so we just add 1 to the key to get the term
$urlterm = $pageterms[($key+1)];
//echo "<p>the term in the url is ".$urlterm."</p>"; //DEBUG
// get all the terms for this custom taxonomy
$myterms = get_terms( array(
\'taxonomy\' => $value,
\'hide_empty\' => false,
) );
//echo "the terms are <pre>";print_r($myterms);echo "</pre>"; //DEBUG
//create a simple array to store the terms for use in a query
$termsarray = [];
// get the slugs only
$termsarray = wp_list_pluck( $myterms, \'slug\' );
//echo "terms array is <pre>";print_r($termsarray);echo "</pre>"; //DEBUG
// build a new query to get all the posts for the custom taxonomy
// this is sortable but the OP didn\'t mention that
$myargs = array(
\'post_type\' => \'post\',
\'posts_per_page\' => -1,
\'tax_query\' => array(
array(
\'taxonomy\' => $value,
\'field\' => \'slug\',
\'terms\' => $termsarray,
)
)
);
$newquery = new WP_Query( $myargs );
//echo "newquery is <pre>";print_r($newquery);echo "</pre>"; //DEBUG
// now we have all the posts for the custom taxonomy
// so we can print whatever we like
// Page Header
echo \'<h1 class="page-title">\'.$value.\'</h1>\';
while ( $newquery->have_posts() ) {
$newquery->the_post();
the_title( \'<h1 class="entry-title">\', \'</h1>\' );
}
}
//echo "<br/>TESTING - END<br/>"; //DEBUG
}
这是分类法的摘录。php。“checktax”函数完成此工作。
get_header(); ?>
<div class="wrap">
<?php if ( have_posts() ) : ?>
<header class="page-header"><!-- taxonomy -->
<?php
checktax();
the_archive_title( \'<h1 class="page-title">\', \'</h1>\' );
the_archive_description( \'<div class="taxonomy-description">\', \'</div>\' );
?>
</header><!-- .page-header -->
<?php endif; ?>
最后,这是一个屏幕快照。