我想我应该告诉你我是怎么解决的。
在与同事讨论后,他指出,在url中添加后续年份不会影响显示的页面(我还没来得及找出原因),因此:
/类别/子类别/2011/
显示与相同的页面
/类别/子类别/
这意味着我可以解析url并从中提取年份,然后将其添加到查询中。
我将其添加到标题中以解析url(我确信有更有效的方法,但这对我来说效果很好):
$current = $_SERVER[\'REQUEST_URI\']; // get the url
$parts = explode(\'/\',$current); // break the url down into parts
$parts = array_slice($parts, 1, -1); // for some reason, first and last array items were blank, so trim them
$pattern = "/\\d{4}/"; // set the pattern to match a 4 digit number
$last = end($parts); // get the last item in the array
$year = \'\'; // set the year variable to be empty
if(preg_match($pattern, $last)) { // test the last array item against the 4 digit pattern
$year = $last; // if it is a number, then set the year variable to that value
$parent_parts = array_slice($parts, 0, -1); // as I need this to work with both the url having a number at the end and on the parent page too (without a year in the URL), make the parent part path by trimming out the year component
$parent = implode(\'/\',$parent_parts); // remake the url parts
$parent = \'/\'.$parent.\'/\'; // add leading and trailing slashes
} else {
$parent = $current; // if the test doesn\'t find a year, just set the parent to the REQUEST_URI
}
这可能看起来过于复杂,但逻辑是可行的。如果我在以下地点进行为期一年的测试:
/类别/子类别/
我需要代码来知道如何处理这个位。因为我总是需要url的这一部分,如果url是:
/类别/子类别/2011/
我需要把2011年从中删掉。这一点在更深的地方变得更加明显。
我将标题显示更改为:
<h2><?php the_title(); ?></h2>
收件人:
<h2><?php echo get_the_title();
if($year !== \'\'){
echo \': Archives \'.$year;
}
?></h2>
这只是意味着在父页面上,我输出标题,在年份子页面上,我可以在其末尾添加“:Archives 2011”,使其看起来像一个合适的归档文件。
我在页面顶部有一个年度下拉列表。以前这是用wp\\u get\\u归档填充的,但我现在已经放弃了。现在,我需要有一个名为“All”的第一个项目,它将恢复到父级,完整的帖子列表,下拉列表中的每个后续项目都是一年。
<select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;"> // standard wp_get_archives dropdown jump functionality
<option value="<?php echo get_bloginfo(\'url\'); ?><?php echo $parent; ?>">All</option> // the "All" option, with the parts formulating the url
<?php
$years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts ORDER BY post_date DESC"); // getting a list of years for all the posts in the category
foreach($years as $list_year) :
if($list_year == $year) {
$select = \' selected="selected"\'; // ensures that the current year stays selected
} else {
$select = \'\';
} ?>
<option value="<?php echo get_bloginfo(\'url\'); ?><?php echo $parent; ?><?php echo $list_year; ?>/"<?php echo $select; ?>><?php echo $list_year; ?></option> // populates the option field
<?php endforeach; ?>
</select>
非常简单的东西。我从以下网站获得了大部分下拉代码:
http://wordpress.org/support/topic/archives-by-year-this-is-different我可能需要在MySQL查询中添加一个类别组件。
最后,我更改了WP\\u查询,以包含一个year属性。由于在选择父页时此选项为空,因此默认为最新日期。否则,仅显示所选年份:
$paged = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : false;
$args = array(\'cat\' => $cat, \'posts_per_page\' => \'10\', \'paged\' => $paged, \'year\' => $year );
$query = new WP_Query($args);
为了更好地衡量,我在页面中留下了我与wp\\u pagenavi插件一起使用的页面。
这里的教训是WordPress多站点归档令人震惊。DIY更好。我希望这能帮助其他人。
UPDATE: 在这方面遇到了分页的主要问题。虽然正在研究解决方案,但似乎没有简单的方法来解决这个问题。WordPress似乎无法很好地处理特定类别的归档和分页。