<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>不存在的空间 &#187; PHP</title>
	<atom:link href="http://cnzhx.net/blog/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://cnzhx.net</link>
	<description>Just notes about something I&#039;m interested in</description>
	<lastBuildDate>Fri, 30 Jul 2010 10:52:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>修正WordPress相关文章插件Efficient Related Posts的set_time_limit错误</title>
		<link>http://cnzhx.net/blog/articles/fix-efficient-related-posts-set_time_limit-error/</link>
		<comments>http://cnzhx.net/blog/articles/fix-efficient-related-posts-set_time_limit-error/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 10:09:29 +0000</pubDate>
		<dc:creator>lonelicloud</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tips]]></category>
		<guid isPermaLink="false">http://cnzhx.net/?p=2148</guid>
		<description><![CDATA[给文章后面加上相关文章列表是件很好的事情，可是我们都知道，数据库查询越多，网站响应速度就越慢。因为听说Efficient Related Posts这个插件能够降低数据库查询数量，于是就用上了。可是最近发现每次发表文章或者更新menus总会有错误出现，也不知道是因为更新了插件版本，还是因为升级到了WordPress 3.0。好在这个问题并不严重，如是就自己解决了。]]></description>
			<content:encoded><![CDATA[<p>给文章后面加上相关文章列表是件很好的事情，可是我们都知道，数据库查询越多，网站响应速度就越慢。因为听说<a href="http://wordpress.org/extend/plugins/efficient-related-posts/">Efficient Related Posts</a>这个插件能够降低数据库查询数量，于是就用上了。可是最近发现每次发表文章或者更新menus总会有错误出现，也不知道是因为更新了插件版本，还是因为<a href="http://cnzhx.net/blog/articles/upgrade-to-wp30-multisite-subdirectory/">升级到了WordPress 3.0</a>。好在这个问题并不严重，如是就自己解决了。</p>
<p><span id="more-2148"></span>错误提示如下，</p>
<blockquote><p>for security reason, &#8230;&#8230;&#8230;, function set_time_limit(60) has in /efficient-related-posts.php on line 327 has been disabled &#8230;&#8230;&#8230;</p></blockquote>
<p>特别是在更新menus的时候，一下子会出来非常多的这个错误提示，估计跟menus中的条目数一样多。实在烦的受不了了，就根据提示将该文件这一句给注释掉了：</p>
<blockquote><p>//set_time_limit(60);</p></blockquote>
<p>在前面加上//，世界一下子就清静了下来:-)</p>
<p>实际上，注释掉这一句并没有什么大碍，至少目前没有发现什么问题。如果你也遇到类似的情况，不妨试试看。</p>
]]></content:encoded>
			<wfw:commentRss>http://cnzhx.net/blog/articles/fix-efficient-related-posts-set_time_limit-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 3.0自定义导航菜单</title>
		<link>http://cnzhx.net/blog/articles/wordpress-3-0-menus/</link>
		<comments>http://cnzhx.net/blog/articles/wordpress-3-0-menus/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 14:19:02 +0000</pubDate>
		<dc:creator>lonelicloud</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tips]]></category>
		<guid isPermaLink="false">http://cnzhx.net/?p=2121</guid>
		<description><![CDATA[WordPresss 3.0的亮点之一就是引入了一个全新的导航菜单系统：menus。这一系统可能比它提供的多站点功能（MultiSite）更让使用者们兴奋。因为一直以来都有很多人苦恼于个性化导航菜单的设计不易，各种主题提供的解决方案不能满足要求，虽然有大量专门的插件却难于配置。同时又因为没有统一的标准，当我们想享受WordPress的不同主题的时候，一系列关于导航菜单的问题就会让人抓破脑袋。今天就让我们一起来领略一下WordPress 3.0的自定义菜单功能的简易与强大。]]></description>
			<content:encoded><![CDATA[<p>WordPresss 3.0的亮点之一就是引入了一个全新的导航菜单系统：menus。这一系统可能比它提供的多站点功能（MultiSite）更让使用者们兴奋。因为一直以来都有很多人苦恼于个性化导航菜单的设计不易，各种主题提供的解决方案不能满足要求，虽然有大量专门的插件却难于配置。同时又因为没有统一的标准，当我们想享受WordPress的不同主题的时候，一系列关于导航菜单的问题就会让人抓破脑袋。今天就让我们一起来领略一下WordPress 3.0的自定义菜单功能的简易与强大。</p>
<p><span id="more-2121"></span>下面是一位主题开发人员，<a title="Justin  Tadlock" href="http://justintadlock.com/archives/author/admin/">Justin Tadlock</a>，写的介绍WordPress 3.0引入的menus导航菜单的文章，我觉得很不错，就给翻译出来与大家分享。该文同时介绍了作为一个主题开发者可以如何将WordPress 3.0的这一特性集成到主题中去。</p>
<blockquote><p><strong>导读</strong></p>
<ul>
<li><a href="http://cnzhx.net/blog/articles/wordpress-3-0-menus/#features">Menus系统特性</a></li>
<li><a href="http://cnzhx.net/blog/articles/wordpress-3-0-menus/#register">在主题中注册一个菜单</a></li>
<li><a href="http://cnzhx.net/blog/articles/wordpress-3-0-menus/#show">显示一个导航菜单</a></li>
<li><a href="http://cnzhx.net/blog/articles/wordpress-3-0-menus/#styling">为导航菜单设定样式</a></li>
<li><a href="http://cnzhx.net/blog/articles/wordpress-3-0-menus/#functions">一些有用的相关函数</a></li>
</ul>
</blockquote>
<h4><a name="features">Menus系统特性</a></h4>
<p>在WordPress 3.0中，你将会在管理控制面板的<em>Appearance</em><em>（外观）</em> 菜单下见到一个被称为 <em>Menus</em> 的菜单系统。下图展示了该页面的4个主要元素。</p>
<ul>
<li><strong>菜单位置</strong><strong>Theme Locations:</strong> 如果你的主题支持导航菜单功能，它会提供一个位置让你可以添加自定义菜单。在这里可以定义每个菜单在主题中的位置。</li>
<li><strong>菜单列表</strong><strong>Individual Menus:</strong> 这里显示的是你的菜单名称，一旦你创建了一个菜单，它的名称就出现在这里。（只要单击后面的“+”号就能创建一个新菜单。）</li>
<li><strong>增加菜单条目：</strong>这里列出了几个包含静态页面、其它文章类型、分类、其它分类系统、自定义链接等的选择框，你可以从中选择要加入到自定义菜单的条目。</li>
<li><strong>菜单条目：</strong>一旦你增加了条目到你的菜单系统中，它们就会出现在这里，你可以从这里配置条目的属性。</li>
</ul>
<p style="text-align: center;"><a href="http://cnzhx.net/wp-content/uploads/2010/06/1_general.png"><img class="aligncenter size-full wp-image-2122" title="1_general" src="http://cnzhx.net/wp-content/uploads/2010/06/1_general.png" alt="" width="483" height="272" /></a></p>
<p>每个菜单条目都有它自己的配置选项。添加了条目之后，你就可以打开它，对其属性进行编辑。</p>
<ul>
<li>URL（链接）</li>
<li>Navigation Label（导航标签）</li>
<li>Title Attribute（标题属性）</li>
<li>CSS Classes（CSS类）</li>
<li>Link Relationship （XFN，链接关系）</li>
<li>Description（描述）</li>
<li>Link Target（链接目标，Please note that a kitten dies every      time a link is opened in a new window/tab.（实在对不住，这句不知道怎么译。））</li>
</ul>
<p><a href="http://cnzhx.net/wp-content/uploads/2010/06/2_configure.png"><img class="aligncenter size-full wp-image-2123" title="2_configure" src="http://cnzhx.net/wp-content/uploads/2010/06/2_configure.png" alt="" width="483" height="355" /></a></p>
<h4><a name="register">在主题中注册一个菜单（设置主题中不同位置处的菜单）</a></h4>
<p>要将某个特定的菜单添加到主题中的某个位置，需要将该菜单登记进去。否则，我们就不知道哪个菜单应该在哪个位置上出现。该函数有两种使用方式：</p>
<ul>
<li>register_nav_menu(): 注册一个单一的菜单位置。</li>
<li>register_nav_menus(): 注册多个菜单位置。</li>
</ul>
<p>在下面的例子中，我们将在主题的functions.php函数中注册一个称为<em>Primary Menu</em>的菜单</p>
<p><code>add_action( 'init', 'register_my_menu' );<br />
function register_my_menu() {<br />
register_nav_menu( 'primary-menu', __( 'Primary Menu' ) );<br />
}</code></p>
<p>“primary-menu”是我们在代码中用于标识该菜单的别名。“Primary Menu”是我们在控制面板中用于标识该菜单的标签。</p>
<p>当然，我们也可以利用类似的方式注册多个菜单。</p>
<p><code>add_action( 'init', 'register_my_menus' );<br />
function register_my_menus() {<br />
register_nav_menus(<br />
array(<br />
'primary-menu' =&gt; __( 'Primary Menu' ),<br />
'secondary-menu' =&gt; __( 'Secondary Menu' ),<br />
'tertiary-menu' =&gt; __( 'Tertiary Menu' )<br />
)<br />
);<br />
}</code></p>
<h4><a name="show">显示一个导航菜单</a></h4>
<p>有两种方式可用于显示一个导航菜单。一种是在主题模板中调用 <a title="WordPress Codex: wp_nav_menu()" href="http://codex.wordpress.org/Function_Reference/wp_nav_menu">wp_nav_menu()</a> 函数，另一种是使用<em>Navigation Menu</em> 小工具。</p>
<h5>在主题模板中显示一个菜单</h5>
<p>大多数主题都会在 header.php 模板中调用一个导航栏，但是MENUS能够放在主题的任何位置。调用自定义导航菜单的最简单形式为：</p>
<p><code>&lt;?php wp_nav_menu(); ?&gt;</code></p>
<p>该语句将会加载用户创建的菜单或者如果导航菜单不存在的话就调用一个标准的页面列表。</p>
<p>我们可能想对这个调用进行更多的控制。如果从前面提到的 Primary Menu 来调用一个导航菜单，可以这么做：</p>
<p><code>&lt;?php wp_nav_menu( array( 'theme_location' =&gt; 'primary-menu' ) ); ?&gt;</code></p>
<p>你还可以拥有更多的控制权。wp_nav_menu() 函数有几个参数，可以用来对将要显示的菜单进行控制：</p>
<ul>
<li>theme_location: 调用一个与特定的主题位置相关联的菜单。</li>
<li>menu: 调用指定ID、别名或名称的菜单。</li>
<li>container: 封装该菜单的元素。默认是 div，但是如果你使用HTML 5的话，你也可以改为nav。</li>
<li>container_class: 封装元素的CSS类（指定其显示样式）。</li>
<li>menu_class: 指定无序列表的CSS类，默认是 menu。</li>
<li>fallback_cb: 指定不存在菜单项目时要调用的函数。默认情况下会调用wp_list_pages() 函数（WordPress的静态页面列表）。</li>
<li>before: 要显示在链接文字之前的文字（也是链接的一部分）。</li>
<li>after: 要显示在链接文字之后的文字（也是链接的一部分）。</li>
<li>link_before: 要显示在链接前面的文字（不是链接的一部分）。</li>
<li>link_after: 要显示在链接后面的文字（不是链接的一部分）。</li>
<li>depth: 指定显示菜单的层次深度，这在定义下拉式菜单的比较有用。默认情况是0（所有层次）。</li>
<li>walker: 允许自定义一个walker（巡游？）PHP 类来创建菜单。</li>
<li>echo: 定义是显示该菜单还是仅仅返回数据供PHP程序使用。默认是真，直接显示该菜单。</li>
</ul>
<h5>使用导航菜单微件显示一个菜单</h5>
<p>默认情况下，WordPress 提供了一个简单的菜单微件让我们能够显示选择任何自定义的菜单。你需要的仅仅是一个支持微件的主题（似乎一般的主题都支持微件的吧）。这项使用很简单，就不多介绍了。</p>
<h4><a name="styling">为导航菜单设定样式</a></h4>
<p>这里无法完全教会您如何给一个菜单编写样式，那需要一个完整的CSS教程才能完成。但是一般情况下我们只需要对已有的样式进行修改即可，所以这里给出一些技巧，帮助您修改菜单的CSS样式。</p>
<p>哪里有菜单样式可用？其实很简单。首先，很多主题都已经自带了菜单的样式。其次，如果您看到某个页面上的菜单样式很好看，可以右键单击该页面，选择“查看源文件”，然后找到（可以搜索，Ctrl+F）style.css文件并下载下来就知道它用的是什么样的样式了。</p>
<p>下面让我们来看看一些简单的技巧：</p>
<p>使用 current-menu-item class（CSS类）可以设定当前正在浏览的菜单条目的样式。它让您能够高亮选中读者当前正在浏览的页面对应的导航栏条目。下面是一个示例：</p>
<p><code>#primary-menu li<span style="color: #ff0000;">.current-menu-item</span> a {<br />
background: #fff url(images/primary-menu-active.png) repeat-x 0 0;<br />
border-top: none;<br />
border-bottom: 2px solid #fff;<br />
}</code></p>
<p>您可以以一个很可靠的插件 <a title="Superfish plugin" href="http://users.tpg.com.au/j_birch/plugins/superfish/">Superfish jQuery </a>作为基础。它提供一些细微但很酷的JavaScript功能，还能够修正菜单在Internet Explorer 6中的下拉问题而不需要再去采取别的手段。</p>
<p>到这里，你应该已经了解到处理WordPress中的自定义导航菜单的各方面内容了。不过，下面还有一些更深层次的技巧，也许你也想了解一下。</p>
<h4><a name="functions">一些有用的相关函数</a></h4>
<h5>下拉导航菜单</h5>
<p>假设你希望用户加入条目后该菜单才显示出来。该特性让我们可以使用很多的布局方式。下面的说明让你能够支持最多4种布局方式。</p>
<p>这种设置的关键在于确保系统不会因为没有检测到memus而调用默认的菜单。下面以前面创建的主菜单 (Primary Menu) 为例进行说明。</p>
<p><code>&lt;?php wp_nav_menu( array( 'theme_location' =&gt; 'primary-menu', 'fallback_cb' =&gt; '' ) ); ?&gt;</code></p>
<p>上面的代码告诉WordPress，我们不希望WordPress因为用户没有给菜单添加条目（因而该菜单不会显示）而被回调到任何别的菜单（WordPress默认情况下可能会调用默认的菜单，是不是它觉得你总该有个菜单吧:-)）。</p>
<h5>检查某个主题位置是否存在一个菜单</h5>
<p>WordPress 提供了一个条件函数has_nav_menu() 来检查特定主题位置是否存在一个菜单。假设我们创建了一个容器，其中包含了一个菜单和一个搜索框。但是，如果没有为该位置定义菜单，我们希望这两个东西都不显示出来。也就是说，让这两样东西要么同时出现，要么都不出现。</p>
<p>当你在某个主题位置调用一个菜单时，可以先检查是否有菜单关联到该位置。注意，下面的例子中我们使用菜单别名而不是名称或者ID来进行判断。</p>
<p><code>&lt;?php if ( has_nav_menu( 'primary-menu' ) ) { ?&gt;<br />
&lt;div class="nav-container"&gt;<br />
&lt;?php wp_nav_menu( array( 'theme_location' =&gt; 'primary-menu' ) ); ?&gt;<br />
&lt;?php get_search_form(); ?&gt;<br />
&lt;/div&gt;<br />
} ?&gt;</code></p>
<h5>允许更多地菜单容器标签</h5>
<p>默认的菜单系统只允许使用 &lt;div&gt; 和 &lt;nav&gt; 作为菜单容器。这能满足大多数需要。但是，如果因为某些原因，你需要使用别的容器来包含菜单，你可以使用下面的代码来实现。</p>
<p><code>add_filter( 'wp_nav_menu_container_allowedtags', 'my_menu_allowed_tags' );<br />
function my_menu_allowed_tags( $tags ) {<br />
$tags[] = 'p';<br />
return $tags;<br />
}</code></p>
<p>请注意，这里的 &lt;p&gt; 标签仅仅是个例子，实际上一般不会使用这样的标签来包含一个菜单。</p>
<h5>获取所有主题位置列表</h5>
<p>如果你需要列出主题中所有的菜单位置，需要使用下面的函数。该函数返回一个包含所有位置的数组。</p>
<p><code>$locations = get_nav_menu_locations();</code></p>
<h5>创建一个菜单</h5>
<p>多数主题开发者应该不会使用这样的函数，但是也可能会有需要它的地方。大多数情况下，我们应该使用主题位置定义函数（register_nav_menu()）而不是这个函数。但是，如果你需要通过程序来控制一个菜单的创建，就需要使用 wp_create_nav_menu() 函数了。<br />
<code><br />
wp_create_nav_menu( 'Menu Name', array( 'slug' =&gt; 'menu-slug' ) );</code></p>
<h5>检查指定的菜单是否存在</h5>
<p>这个函数对主题开发人员可能没什么用，但是迟早还是会用到的。它让你能够通过ID、名称或别名来检查特定的菜单是否存在。</p>
<p><code>if ( is_nav_menu( 'menu-slug' ) )<br />
/* 如果该菜单存在则执行…… */<br />
else<br />
/* 如果该菜单不存在就执行…… */</code></p>
<p>原文链接：<a href="http://justintadlock.com/archives/2010/06/01/goodbye-headaches-hello-menus">http://justintadlock.com/archives/2010/06/01/goodbye-headaches-hello-menus</a></p>
<p>翻译：<a href="http://cnzhx.net/">lonelicloud</a></p>
<p>如果您使用中有任何问题，欢迎留言，我会尽力给您提供帮助。或者您也可以到<a title="讨论区" href="http://cnzhx.net/bbs/">讨论区</a>的相应版块提问，我会第一时间给您答复，这样可以形成广泛的关于某个话题的讨论，集思广益。</p>
]]></content:encoded>
			<wfw:commentRss>http://cnzhx.net/blog/articles/wordpress-3-0-menus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决 WordPress Feed 显示错误</title>
		<link>http://cnzhx.net/blog/articles/fix-wordpress-feed-error/</link>
		<comments>http://cnzhx.net/blog/articles/fix-wordpress-feed-error/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 13:39:44 +0000</pubDate>
		<dc:creator>lonelicloud</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tips]]></category>
		<guid isPermaLink="false">http://cnzhx.net/?p=2008</guid>
		<description><![CDATA[实在没想到一个Sitemap插件也能导致WordPress出现Feed错误。这不，昨天就碰到了这样的事情。打开FeedBurner上的Feed发现页面空空的，并提示说什么<?xml .......... ?>起始位置不在第一行。着实让我紧张了一番，还好后来问题解决了。]]></description>
			<content:encoded><![CDATA[<p>实在没想到一个Sitemap插件也能导致WordPress出现Feed错误。这不，昨天就碰到了这样的事情。打开FeedBurner上的Feed发现页面空空的，并提示说什么<code>&lt;?xml .......... ?&gt;</code>起始位置不在第一行。着实让我紧张了一番，还好后来问题解决了。</p>
<p><span id="more-2008"></span>错误现象是这样的。打开FeedBurner上的Feed发现页面空空的，如果是IE，按提示查看详细信息，它会告诉你<code>&lt;?xml .......... ?&gt;</code>起始位置不在第一行，也就是这一行前面有空行；如果是<a href="http://www.mozilla.com/firefox/">Firefox</a>，错误提示差不多；如果是<a href="http://www.opera.com">Opera</a>，会有这样的提示，但是它会提示你按照HTML格式解析，然后你就能看到xml文件的代码了。其实，如果在IE或者Firefox中打开错误，你用右键单击页面并“查看源代码”的话，是能看到与Opera中用HTML格式解析时看到的一样的东西。这说明WordPress的Feed输出是没有问题的，出问题的在于某个文件的格式。不幸的是却很难找到是哪个文件出了问题，我再也没有想到是一个插件导致了这样的问题。</p>
<p>在<a href="http://validator.w3.org/feed/docs/error/WPBlankLine.html">W3官网上有针对这一问题的描述和解决方法指导</a>，我给复制过来并翻译，见本文结尾。根据这个方案，我认为对于我们普通用户，检查的重点应该是插件，而不是文件代码，除非你在这之前修改过文件代码。因为如果本来没有问题而突然出现了这样的状况，那说明那些相关的代码不应该是有问题的，因为不管是WordPress文件、插件，还是主题，这都是经过检验的，一般不会出问题。所以，对于普通用户而不是程序员来说，应该先检查你最近启用的插件，排除之后再针对其它的几条进行检查。</p>
<p><strong>Blank line before XML declaration (WordPress)</strong><br />
在XML声明前有空行（WordPress）</p>
<h4>Explanation 解释</h4>
<p>If an XML declaration (<code>&lt;?xml ... ?&gt;</code>) appears in  your feed, it must be the first thing in the feed, before any whitespace.<br />
如果一个XML声明(<code>&lt;?xml ... ?&gt;</code>) 出现在你的Feed文件中，它必须是该Feed文件中的第一个出现的，应该在任何空白（<a href="http://cnzhx.net/">译者</a>注，空格、空行）之前。</p>
<p>Unfortunately, with WordPress it seems all too easy for a plugin, a theme, or for your configuration file to contain a blank line. Further compounding this problem, some — but not all — feed readers compensate for this common error, allowing the error to go  undetected for quite a while.<br />
不幸的是，WordPress中的插件、主题、配置文件等却很容易带有空行。而且一些——但不是全部——Feed阅读器会修正这一常见错误，暂时允许这个错误不被检测而正常显示Feed，这使得这个问题变得复杂起来。（<a href="http://cnzhx.net/">译者</a>注，因为可能错误不是立即出现，你便不容易找到错误的根源所在。实际上我们应该也没有习惯总是阅读自己的Feed吧。这个我有体会，因为在我对FeedBurner进行一些设置之前，Feed一直是没有问题的，在Google Reader中可以正常收到更新。但是设置完了一更新，FeedBurner就提示说我的Feed源有问题。然后我直接打开WordPress的Feed页，就发现存在同样的错误提示。）</p>
<h4>Solution 解决方法</h4>
<ul>
<li>PHP also uses a similar notation: <code>&lt;?php ... ?&gt;</code>.   Note that the final <em>php</em> <code>?&gt;</code> should be omitted  from all PHP code files—modules, includes, etc.  The closing delimiter  is optional in PHP (but not in XML), and removing it helps prevent  unwanted white space at the end of files which can cause problems with  your feeds.<br />
PHP文件也会使用一个类似的记号：<code>&lt;?php ... ?&gt;</code>。最好将最后的 <em>php</em> <code>?&gt;</code> 从所有的PHP代码文件，如modules, includes中扔掉。这个结束符号在PHP中可要可不要（但是在XML中却必须要有），去掉这个标记可以避免在文件结尾出现不希望出现的空白，对防止出现类似问题有帮助。</li>
<li>Check your <code>wp-rss2.php</code> and <code>wp-atom.php</code> files for blank lines outside of <code>&lt;?</code> and <code>?&gt;</code> bracketed sections.<br />
检查你的 <code>wp-rss2.php</code> 和 <code>wp-atom.php</code> 文件，看看在 <code>&lt;?</code> 和 <code>?&gt;</code> 标记之外是不是有空行。</li>
<li>Check your <code>wp-config.php</code> file for blank lines outside of <code>&lt;?</code> and <code>?&gt;</code> bracketed sections.<br />
检查你的 <code>wp-config.php</code> 文件看看在 <code>&lt;?</code> 和 <code>?&gt;</code> 标记之外是否有空行。</li>
<li>Check your theme&#8217;s <code>functions.php</code> file for  blank lines outside of <code>&lt;?</code> and <code>?&gt;</code> bracketed sections.<br />
检查你的主题中 <code>functions.php</code> 文件，看看在 <code>&lt;?</code> 和 <code>?&gt;</code> 标记之外是否有空行。</li>
<li>One by one, disable plugins and revalidate until you isolate the one  causing the problem.<br />
一个一个的禁用插件并检查Feed是否出错，直到确定导致问题的那个插件。</li>
</ul>
<p>转载请注明：来自<a href="http://cnzhx.net/">不存在的空间</a>， 作者<a href="http://cnzhx.net/about/">lonelicloud</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://cnzhx.net/blog/articles/fix-wordpress-feed-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>强制WordPress 3.0以子目录形式安装多站点功能</title>
		<link>http://cnzhx.net/blog/articles/wordpress-3-0-force-enable-sub-directory-multisite/</link>
		<comments>http://cnzhx.net/blog/articles/wordpress-3-0-force-enable-sub-directory-multisite/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 11:20:35 +0000</pubDate>
		<dc:creator>lonelicloud</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[MultiSite]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[升级]]></category>
		<category><![CDATA[域名]]></category>
		<category><![CDATA[安装]]></category>
		<guid isPermaLink="false">http://cnzhx.net/?p=1878</guid>
		<description><![CDATA[升级到WordPress 3.0之后，如果要启用其博客网络（Network）功能，通常有两种安装方式：子域名（sub-domain）和子目录（sub-directory），并且安装后不能更改。如果是全新安装，你可以在安装时选择一种方式进行。但是如果你是从原来的版本升级而来，并且将WordPress安装在了主机空间根目录下，则启用Network功能时将不能选择，程序默认会以子域名形式安装博客网络。可是很多空间并不支持泛域名解析，而只能用子目录来区分每个站点，这时我们可以通过修改WordPress 3.0 源代码强制其以子目录形式安装博客网络功能。当然你也可以使用这样的方法强制以子域名方式安装博客网络功能。]]></description>
			<content:encoded><![CDATA[<p>升级到WordPress 3.0之后，如果要启用其博客网络（Network）功能，通常有两种安装方式：<strong>子域名（sub-domain）</strong>和<strong>子目录（sub-directory）</strong>，并且<strong>安装后不能更改</strong>。如果是全新安装，你可以在安装时选择一种方式进行。但是如果你是从原来的版本升级而来，并且将WordPress安装在了主机空间根目录下，则启用Network功能时将不能选择，程序默认会以子域名形式安装博客网络。可是很多空间并不支持泛域名解析，而只能用子目录来区分每个站点，这时我们可以通过修改WordPress 3.0 源代码强制其以子目录形式安装博客网络功能。当然你也可以使用这样的方法强制以子域名方式安装博客网络功能。</p>
<p><span id="more-1878"></span>对于该问题的描述请参考文章“<a title="Permanent Link to 升级到WordPress 3.0多站点模式问题探索" rel="bookmark" href="http://cnzhx.net/blog/articles/update-to-wordpress-3-0-multisite-problem/">升级到 WordPress 3.0多站点模式问题探索</a>”，本文主要描述修改WordPress 3.0源代码使其直接以子目录形式启用Network功能的方法。</p>
<p><strong><span style="color: #990000;">请在使用此方法前确认你已经知道了它可能造成的链接地址冲突的问题（请参考文章“<a title="Permanent Link to 升级到WordPress 3.0多站点模式问题探索" rel="bookmark" href="http://cnzhx.net/blog/articles/update-to-wordpress-3-0-multisite-problem/">升级到 WordPress 3.0多站点模式问题探索</a>”），并有了解决办法（请参考“<a href="http://cnzhx.net/blog/articles/safely-change-permalinks-of-wordpress/">安全修改WordPress网站永久链接形式</a>”），或者你确实想忽略这些可能产生的问题。</span></strong></p>
<p>如果你希望强制以形式安装WordPress 3.0，而不管它会产生怎样的链接地址冲突，请按照以下方法进行。</p>
<p>你可以通过主机空间控制面板上提供的 online-file-manager （我用的是cpanel里提供的net2ftp）来直接打开文件进行编辑，也可以将其在本地使用UltraEdit、Dreamweaver等编辑器打开编辑之后再上传到主机空间上的对应位置。</p>
<p>该文件位于 <code>/wp-admin/network.php</code>。打开该文件后定位到大约行39~68的代码段。WordPress 3.0 RC1 15059 中的原始代码如下：</p>
<blockquote><p><code>/**<br />
* Allow subdomain install //允许子域名安装<br />
*<br />
* @since 3.0.0<br />
* @return bool Whether subdomain install is allowed<br />
*/<br />
function allow_subdomain_install() {<br />
$domain = preg_replace( '|https?://[^/]|', '', get_option( 'siteurl' ) );<br />
if( false !== strpos( $domain, '/' ) || 'localhost' == $domain || preg_match( '|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|', $domain ) )<br />
return false;<br />
return true;<br />
}<br />
/**<br />
* Allow subdirectory install //允许子目录安装<br />
*<br />
* @since 3.0.0<br />
* @return bool Whether subdirectory install is allowed<br />
*/<br />
function allow_subdirectory_install() {<br />
global $wpdb;<br />
if ( apply_filters( 'allow_subdirectory_install', false ) )<br />
return true;<br />
$post = $wpdb-&gt;get_row( "SELECT ID FROM $wpdb-&gt;posts WHERE post_date &lt; DATE_SUB(NOW(), INTERVAL 1 MONTH) AND post_status = 'publish'" );<br />
if ( empty( $post ) )<br />
return true;<br />
return false;<br />
}</code></p></blockquote>
<p>可以将修改为：</p>
<blockquote><p><code>/**<br />
* Allow subdomain install //允许子域名安装<br />
*<br />
* @since 3.0.0<br />
* @return bool Whether subdomain install is allowed<br />
*/<br />
function allow_subdomain_install() {<br />
$domain = preg_replace( '|https?://([^/]+)|', '$1', get_option( 'siteurl' ) );<br />
if( false !== strpos( $domain, '/' ) || 'localhost' == $domain || preg_match( '|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|', $domain ) )<br />
return false;<br />
return <span style="color: #990000;">false</span>; <span style="color: #990000;">//由true改成false，将直接禁用子域名安装</span><br />
}<br />
/**<br />
* Allow subdirectory install //允许子目录安装<br />
*<br />
* @since 3.0.0<br />
* @return bool Whether subdirectory install is allowed<br />
*/<br />
function allow_subdirectory_install() {<br />
global $wpdb;<br />
if ( apply_filters( 'allow_subdirectory_install', false ) )<br />
return true;<br />
//$post = $wpdb-&gt;get_row( "SELECT ID FROM $wpdb-&gt;posts WHERE post_date &lt; DATE_SUB(NOW(), INTERVAL 1 MONTH) AND post_status = 'publish'" );<br />
//if ( empty( $post ) )<br />
//	return true;<br />
return <span style="color: #990000;">true</span>; <span style="color: #990000;">//任何情况均返回 true ，则总是以子目录形式安装</span><br />
}</code></p></blockquote>
<p>将修改后的代码上传到服务器就可以进入管理控制台启用网络功能了。通过“<strong>工具（Tools）——&gt;网络（Network）</strong>”启用网络功能时将直接提示：</p>
<blockquote><p>“Because your install is in a directory, the sites in your WordPress network must use sub-directories.</p>
<p>因为你的WordPress安装在一个目录中，你的网络中的站点必须使用子目录（作为链接地址）。”</p></blockquote>
<p>这句话可以无视，因为我们是通过修改代码来强制在根目录以子目录形式安装的。如下图所示：</p>
<p style="text-align: left;">
<div id="attachment_1893" class="wp-caption aligncenter" style="width: 589px"><a href="http://cnzhx.net/wp-content/uploads/2010/06/sub-directory_1.png"><img class="size-full wp-image-1893 " title="sub-directory_1" src="http://cnzhx.net/wp-content/uploads/2010/06/sub-directory_1.png" alt="" width="579" height="291" /></a><p class="wp-caption-text">以子目录形式安装多站点网络的提示</p></div>
<p>该方法是肯定可行的，因为我的这个网站就已经通过这样的方式完成了升级。具体请看我的这篇文章：<a href="http://cnzhx.net/blog/articles/upgrade-to-wp30-multisite-subdirectory/">升级至WordPress 3.0多站点模式</a>。</p>
<p>转载请注明：来自<a href="http://cnzhx.net/">不存在的空间</a>， 作者<a href="http://cnzhx.net/about/">lonelicloud</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://cnzhx.net/blog/articles/wordpress-3-0-force-enable-sub-directory-multisite/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>php文件编码格式对结果有影响？</title>
		<link>http://cnzhx.net/blog/articles/encoding-of-php-file-matters-a-lot/</link>
		<comments>http://cnzhx.net/blog/articles/encoding-of-php-file-matters-a-lot/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 14:49:26 +0000</pubDate>
		<dc:creator>lonelicloud</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://cnzhx.net/blog/?p=894</guid>
		<description><![CDATA[近日发现我自己用notepad编辑的wordpress中page的自定义页面顶端的背景比原模板的宽。后来我复制一份wordpress自带的page模板，删除代码，然后把自己的代码放进去。这样就解决了问题。难道php文件的编码格式对服务器处理文件内容有影响吗？我对php编程并不熟悉，但是看样子是这样的。]]></description>
			<content:encoded><![CDATA[<p>近日发现我自己用notepad编辑的wordpress中page的自定义页面顶端的背景比原模板的宽。后来我复制一份wordpress自带的page模板，删除代码，然后把自己的代码放进去。这样就解决了问题。难道php文件的编码格式对服务器处理文件内容有影响吗？我对php编程并不熟悉，但是看样子是这样的。</p>
<p>如果有朋友能够给我释疑就好了。</p>
<h4><span id="more-894"></span>2010.01.28 终于找到了解释</h4>
<p>以下内容引自 <a href="http://bbs.phphubei.com/thread-932-1-1.html">网页UTF8编码开发中空白的问题</a></p>
<blockquote><p>页面采用UTF8编码，头部和尾部用了模板包含文档的method，结果头部和尾部无端端各多出一个约10px的空行，什么也没有。</p>
<p>原因是全部采用utf8编码，包含文档的时候，最后的二进制流中包含了多次UTF8 BOM标记，IE不能正常解析包含多个UTF8 BOM 标记的页面，直接替换成实际显示的回车，这样导致一个空行，而firefox却没有这个问题。</p>
<p>故如果模板采用包含的method包含多个utf8文档需要用ultraedit保存时另存为功能 选择utf8 无bom格式保存即可。</p>
<p>另外，如果中文页面在html head标记中将title标记放在&lt;meta http-equiv=”Content-type” Content=”text/html; Charset=UTF-8″ /&gt;前面会导致页面空白。</p>
<p>所以utf8页面应该使用标准顺序：</p>
<p><code>&lt;meta http-equiv=”Content-type” Content=”text/html; Charset=UTF-8″ /&gt;<br />
&lt;meta http-equiv=”Content-language” Content=”zh-CN” /&gt;<br />
&lt;meta name=”robots” Content=”index,follow” /&gt;<br />
&lt;meta name=”keywords” Content=”" /&gt;<br />
&lt;meta name=”desCription” Content=”" /&gt;<br />
&lt;meta name=”rating” Content=”general” /&gt;<br />
&lt;meta name=”author” Content=”" /&gt;<br />
&lt;meta name=”Copyright” Content=”" /&gt;<br />
&lt;meta name=”generator” Content=”" /&gt;<br />
&lt;title&gt;&lt;/title&gt;</code></p>
<p>BOM头：\xEF\xBB\xBF，PHP脚本4、5尚对BOM无视，所以在解析前直接输出。</p>
<p>对此 w3.org 标准 FAQ 中对此问题有一个专门的描述：</p>
<p><a href="http://www.w3.org/International/questions/qa-utf8-bom"><span style="color: black;">www.w3.org/International/questions/qa-utf8-bom</span></a></p>
<p>具体如下:</p>
<p>在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的char，它的编码是FEFF。而FFFE在UCS中是不存在的char，所以不应该出现在实际传输中。UCS规范建议我们在传输字节流 前，先传输 char”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到FEFF，就表明这个字节流是Big-Endian的；如果收到FFFE，就表明这个字节流是Little- Endian的。因此char”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。</p>
<p>UTF-8不需要BOM来表明字节顺序，但可以用BOM来表明编码方式。char”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流，就知道这是UTF-8编码了。</p>
<p>Windows就是使用BOM来标记文本文档的编码方式的操作Systam: WindowsXP Professional , 缺省char集：中文</p>
<p>1） notepad ： 可以自动识别出没有带 bom 的 utf-8 编码格式文档，但不可以控制保存文档时是否添加 bom ， 如果保存文档，那么会统一添加 bom 。</p>
<p>2）editplus ： 不能自动识别出没有 bom 的 utf-8 编码格式文档，文档保存时，选择UTF-8 格式，不会在文档头写上 BOM header.</p>
<p>3） UltraEdit ： 对于char编码的功能最为强大， 可以自动识别带 bom 和不带 bom 的 utf-8 文档 （可以配置） ； 保存的时候可以通过配置选择是否添加 bom.</p>
<p>（特别需要注意的是，保存一个新建立的文档时，需要选择另存为 utf-8 no bom 格式）</p>
<p>后来发现 Notepad ++ 也对于 utf-8 bom 支持比较好，推荐大家使用。</p>
<p>via <a href="http://bbs.phphubei.com">开源部落</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://cnzhx.net/blog/articles/encoding-of-php-file-matters-a-lot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php中explode函数的使用实例</title>
		<link>http://cnzhx.net/blog/articles/examples-of-using-explode-function-in-php/</link>
		<comments>http://cnzhx.net/blog/articles/examples-of-using-explode-function-in-php/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 13:25:18 +0000</pubDate>
		<dc:creator>lonelicloud</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://cnzhx.net/blog/?p=413</guid>
		<description><![CDATA[php中使用一个字符串分割另一个字符串描述的explode函数的使用实例。]]></description>
			<content:encoded><![CDATA[<p>格式：<br />
array explode ( string separator, string string [, int limit] )<br />
此函数返回由字符串组成的数组，每个元素都是 string 的一个子串，它们被字符串 separator 作为边界点分割出来。</p>
<p><span id="more-413"></span></p>
<p>如果设置了 limit 参数，则返回的数组包含最多 limit 个元素，而最后那个元素将包含 string 的剩余部分。<br />
如果 separator 为空字符串（&#8221;"），explode() 将返回 FALSE。<br />
如果 separator 所包含的值在 string 中找不到，那么 explode() 将返回包含 string 单个元素的数组。<br />
如果 limit 参数是负数，则返回除了最后的 limit 个元素外的所有元素。此特性是 PHP 5.1.0 中新增的。</p>
<p>由于历史原因，虽然 implode() 可以接收两种参数顺序，但是 explode() 不行。你必须保证 separator 参数在 string 参数之前才行。</p>
<p>注: 参数 limit 是在 PHP 4.0.1 中加入的。</p>
<p>例子 1.<br />
explode() 示例<br />
// 示例 1 $pizza = &#8220;piece1 piece2 piece3 piece4 piece5 piece6&#8243;;<br />
$pieces = explode(&#8221; &#8220;, $pizza);<br />
echo $pieces[0]; // piece1<br />
echo $pieces[1]; // piece2</p>
<p>// 示例 2<br />
$data = &#8220;foo:*:1023:1000::/home/foo:/bin/sh&#8221;;<br />
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(&#8220;:&#8221;, $data);<br />
echo $user; // foo<br />
echo $pass; // *<br />
?&gt;</p>
<p>例子 2.<br />
limit 参数示例<br />
$str = &#8216;one|two|three|four&#8217;; // 正数的<br />
limit print_r(explode(&#8216;|&#8217;, $str, 2)); // 负数的<br />
limit print_r(explode(&#8216;|&#8217;, $str, -1));<br />
?&gt;<br />
以上示例将输出： Array ([0] =&gt; one [1] =&gt; two|three|four ) Array ( [0] =&gt; one [1] =&gt; two [2] =&gt; three)<br />
注: 该函数可安全用于二进制对象。</p>
<p>例子3.<br />
// 分隔符可以是斜线，点，或横线<br />
$date = &#8220;04/30/1973&#8243;;<br />
list($month, $day, $year) = split (&#8216;[/.-]&#8216;, $date);<br />
echo &#8220;Month: $month; Day: $day; Year: $year<br />
\n&#8221;;</p>
<p>转自：<a href="http://www.diybl.com/course/4_webprogram/php/phpshil/200876/130747.html">explode函数-使用一个字符串分割另一个字符串描述</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cnzhx.net/blog/articles/examples-of-using-explode-function-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Tip: PHP Codes for Getting the Slug of Current Page</title>
		<link>http://cnzhx.net/blog/articles/wordpress-tip-php-codes-for-getting-the-slug-of-current-page/</link>
		<comments>http://cnzhx.net/blog/articles/wordpress-tip-php-codes-for-getting-the-slug-of-current-page/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 13:03:39 +0000</pubDate>
		<dc:creator>lonelicloud</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://cnzhx.net/blog/?p=406</guid>
		<description><![CDATA[PHP codes for getting the slug of current Page and show as a category page.]]></description>
			<content:encoded><![CDATA[<p>While I was working on a WordPress template, I needed to show posts in the category which has the same name ( or slug) of a page. As the WordPress.org said, the codes:<br />
<span id="more-406"></span></p>
<blockquote><p>&lt;?php query_posts(&#8216;category_name=page_slug &amp; showposts=10&#8242;);?&gt;</p></blockquote>
<p>could be used. But how to identify the slug of current page? It took me a long time to find out the way.</p>
<p>Here is the codes I used finally:</p>
<blockquote><p>&lt;?php if(is_page()){</p>
<p>$current_page_link=get_permalink();</p>
<p>$current_page_slug_holder=explode(&#8220;/&#8221;,$current_page_link); /*get current page slug, stored in $current_page_slug_holder<span style="color: #999999;"><span style="text-decoration: line-through;">[4]</span></span>*/</p>
<p>$counter=count($current_page_slug_holder)-2;</p>
<p>/*use variable $counter to get the position, because it may be a subpage, added by lonelicloud at 2009.10.06 14:24*/}</p>
<p>?&gt;</p>
<p><span style="color: #999999;"><span style="text-decoration: line-through;">&lt;?php query_posts(&#8216;category_name=&#8217; . $current_page_slug_holder[</span><span style="text-decoration: line-through;">4] . &#8216;&amp;showposts=10&#8242;);?&gt;</span></span></p>
<p>&lt;?php query_posts(&#8216;category_name=&#8217; . $current_page_slug_holder[$counter] . &#8216;&amp;showposts=10&#8242;);?&gt;</p></blockquote>
<p>Inspireted by:</p>
<p>1. <a href="http://codex.wordpress.org/Category_Templates#What_categories_do_you_show_to_the_visitors.3F">Category Templates</a><br />
2. <a href="http://wordpress.org/support/topic/216752">Subpage get parent page slug</a></p>
<blockquote><p>&lt;?php if (is_page()) { ?&gt;</p>
<p>&lt;?php $cssdir = get_permalink(); ?&gt;</p>
<p>&lt;?php $holder = explode(&#8220;/&#8221;,$cssdir) ?&gt;</p>
<p>&lt;link rel=&#8221;stylesheet&#8221; href=&#8221;&lt;?php bloginfo(&#8216;template_directory&#8217;); ?&gt;/page.css&#8221; type=&#8221;text/css&#8221; media=&#8221;screen&#8221; /&gt;</p>
<p>&lt;link rel=&#8221;stylesheet&#8221; href=&#8221;&lt;?php bloginfo(&#8216;template_directory&#8217;); ?&gt;/&lt;?php echo $holder[3]; ?&gt;/style.css&#8221; type=&#8221;text/css&#8221; media=&#8221;screen&#8221; /&gt;</p>
<p>&lt;?php } ?&gt;</p></blockquote>
<p>3. Also, there is a post working on this, but I can&#8217;t understand:</p>
<blockquote><p>WordPress Tip: Find the Current Page Slug</p>
<p>by Michael on August 9th, 2007 in Tips and Tricks, WordPress</p>
<p>While I was working on a WordPress template today, I needed to find the current page&#8217;s post_slug. After investigating the function is_single in wp-includes/query.php, I discovered the following method for determining the current page ID, post title, or post name:</p>
<p>$post_obj = $wp_query-&gt;get_queried_object();</p>
<p>$post_ID = $post_obj-&gt;ID;</p>
<p>$post_title = $post_obj-&gt;post_title;</p>
<p>$post_name = $post_obj-&gt;post_name;</p>
<p>via <a href="http://www.wenderhost.com/2007/08/wordpress-tip-find-the-current-page-slug/">WordPress Tip: Find the Current Page Slug :: WenderHost</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://cnzhx.net/blog/articles/wordpress-tip-php-codes-for-getting-the-slug-of-current-page/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
