K2的menu直接使用了WordPress的page,导致所有的page都会被当作menu放在页面上方。老早就想改掉一下,一部分page作为menu放在页面上方,一部分放在sidebar。
首先要替换掉header.php里显示menu的部分:
<?php wp_list_pages('sort_column=menu_order&depth=1&title_li='); ?>
替换为:
<?php
define("MENU_IDS","109,105,2"); //需要显示的文章的ID
$menu_ids = explode(',', MENU_IDS);
foreach ($menu_ids as $menu_id) {
$menu_post = get_post($menu_id);
echo '<li class="page_item"><a hre f="' . get_permalink($menu_post->ID) . '" title="' . $menu_post->post_title . '">' . $menu_post->post_title . '</a></li>' . "\n";
}
?>
之所以要用define定义常量,是因为这个东西在sidebar里还要用到,直接定义变量是不可以的,又懒得用全局变量了。sidebar里加上的代码是:
<?php /* Pages */ if (is_home()) { ?>
<div class="sb-pages">
<h2><?php _e('Pages','k2_domain'); ?></h2>
<ul>
<?php
$page_ids = array(222, 122, 205); //后面需要断行的文章的ID
$result = wp_list_pages('sort_column=menu_order&depth=1&exclude=' . MENU_IDS . '&echo=0&title_li=');
$result_a = explode("\n", $result);
foreach ($page_ids as $page_id) {
$url = get_permalink($page_id);
foreach ($result_a as $a => $b) {
if (!(strpos($b, $url)===FALSE))
$result_a[$a] = str_replace('</li>', '<div style="height:8px; margin:0;" /></li>', $result_a[$a]);
}
}
echo implode("\n", $result_a);
?>
</ul>
</div>
<?php } ?>
Update:修正archive日期错误,应该使用其他变量比如$menu_post而不是$post。
Update2:今天开始用K2的SBM,新写了一个module来做这个事情。
您好, 請問上面提到的 SBM module 有開放下載嗎?
另外就是請教一下, 除了直接修改 header.php 之外, 是否有辦法在 header 新增某些 link 指到其他頁面? 或者是說新增某些 page, 但這個 page 是固定指到某個 URL 的? 譬如在 K2 使用 Extended Live Archive 時, 就會有個 Archive 的 page, 然後會轉到 /Archive 這個 URL.
没有放出下载。。。还没弄好。
现在我的Blog的设计只能设置一部分page在menu上,一部分在右边。最近忙着校对WordPress 2.0.7中文包的那1388条字符串,WordPress 2.1又马上发布了,忙啊。我晓得N多人需要在menu那里做链接指向其他网站,等什么时候你看到我的menu出现了我的flickr链接的时候,那么就是改好啦
我找到兩個 plugin, 您參考一下
這個是 Plugin
http://www.tyic.com/2006/10/23/redirectify-is-a-nice-redirect-plugin-for-wordpress/
這個是 Page template
http://cavemonkey50.com/code/redirect-to-page/
看两个插件的名字就知道,这是两个转向插件,利用PHP程序来让访问者转向另外一个页面。下载看了一下,两个是一样的,都是页面模版(page template)。它的原理是,当你访问这个页面时,会返回一个HTTP头,要求页面刷新到另一个地址。
这是个办法,不过更像是没办法的办法。如果这样做,就等于是添加了一个page,比如地址是http://yskin.net/about/,而当访问者点击进入这个地址时,浏览器会收到刷新请求,从而转到新的地址,比如http://www.flickr.com。
如果非要用这个办法,其实可以更简单一点。编辑.htaccess文件,加入
Redirect /about/ http://www.flickr.com/这样的代码就可以了。一个绕了一圈的办法,而非直接的办法,慎用慎用。