<?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; wordpress</title>
	<atom:link href="http://blog.chacuo.net/tag/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.chacuo.net</link>
	<description>web原理、web架构、web安全、web性能、服务器性能、服务器架构、服务器安全;你不能预知明天，但你可以利用今天。你不能样样顺利，但你可以事事尽力!</description>
	<lastBuildDate>Mon, 31 Aug 2020 15:33:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>windows live writer 写wordpress 博客</title>
		<link>http://blog.chacuo.net/130.html</link>
		<comments>http://blog.chacuo.net/130.html#comments</comments>
		<pubDate>Fri, 31 May 2013 15:33:35 +0000</pubDate>
		<dc:creator>程默</dc:creator>
				<category><![CDATA[学习心得]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.chacuo.net/?p=130</guid>
		<description><![CDATA[一直以来，在网上编辑器里面写wordpress 博客，就怕没有保存丢失内容，还有就是大量的图片上存。排版加水印 [...]]]></description>
				<content:encoded><![CDATA[<p>一直以来，在网上编辑器里面写wordpress 博客，就怕没有保存丢失内容，还有就是大量的图片上存。排版加水印等也比较复杂。 一直寻找可客户端软件，能够通过软件写wordpress博客。也可以在线管理博客！</p>
<p>其实，win7 自带的live write 就可以很好完成，而且它有丰富的插件。能够很方便完成图片上存，代码着色等工作。下面我们逐一介绍，希望对大家有帮助。</p>
<ul>
<li>
<h3><font style="font-weight: bold">配置windows live writer 管理wordpress</font></h3>
</li>
</ul>
<h4><font style="font-weight: bold">1、添加帐号</font></h4>
<h3><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image24.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb24.png" width="540" height="375" /></a></h3>
<h4><font style="font-weight: bold">2、配置日志</font></h4>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image25.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb25.png" width="560" height="528" /></a></p>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image26.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb26.png" width="567" height="536" /></a></p>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image27.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb27.png" width="559" height="531" /></a></p>
<h4><font style="font-weight: bold">3、开始写自己的博客了</font></h4>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image28.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb28.png" width="749" height="454" /></a></p>
<p>&#160;</p>
<h4></h4>
<ul>
<li>
<h3><font style="font-weight: bold">使用技巧</font></h3>
</li>
</ul>
<p>1.用户live wirter 多了。你会发现软件里面有，编辑模式、预览模式、源代码模式，可以很方便切换各种模式</p>
<p>2.图片处理简单多了，可以把任意图片，剪切粘贴 到文本任意地方。可以拖地位子，缩放图片。 也可以加上水印。我是live writer 2012版本。 最新版使用跟word类似，排版很方便。</p>
<p>3.你可以到官方网站：<a title="http://plugins.live.com/writer/browse?orderby=featured&amp;page=1" href="http://plugins.live.com/writer/browse?orderby=featured&amp;page=1">http://plugins.live.com/writer/browse?orderby=featured&amp;page=1</a> 下载工具插件，能够实现多种功能</p>
<p>&#160;</p>
<p><strong>后记：</strong></p>
<p>可能你发现你的wordpress 不支持live writer 或者出错了。先找找看，你根目录有没有：xmlrpc.php。 下面我会分享一些，优秀的live wirter 博客插件。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chacuo.net/130.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wordpress 过滤器原理执行过程分析(源码分析)</title>
		<link>http://blog.chacuo.net/89.html</link>
		<comments>http://blog.chacuo.net/89.html#comments</comments>
		<pubDate>Mon, 27 May 2013 15:42:54 +0000</pubDate>
		<dc:creator>程默</dc:creator>
				<category><![CDATA[web项目框架]]></category>
		<category><![CDATA[学习心得]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.chacuo.net/?p=89</guid>
		<description><![CDATA[从上一篇：wordpress 3.5 filter 消息标签的名称 ，我们知道了wordpress过滤器消息灵 [...]]]></description>
				<content:encoded><![CDATA[<p>从上一篇：<a href="http://blog.chacuo.net/88.html">wordpress 3.5 filter 消息标签的名称</a> ，我们知道了wordpress过滤器消息灵活性。接下来，我们分析下这个具体执行过程。这个也是wordpress 优秀代码一个核心点。学习并使用该方法，应用到自己的站点中，将会给自己的系统带来很大的灵活性提升，扩展性将大大增强。其实这 类设计模式，就是”监听者模式“，先让监听者监听某个事件，只要发生某个事情，就去执行任务。对一个事件，可以添加条监控，分别执行独立任务。 不过，消息过滤模式，它有一个特点，每个执行任务将会返回一个结果，这个结果将作为下一个任务输入参数。第一个任务输入参数，就是发送消息，并且传入的参数。</p>
<p>是不是感觉有点晕晕啦，呵呵，如果对监听者设计模式熟悉的话，比较容易理解的。 打个比方说，教室有张三在看小说，李四在聊天。但是，他们都怕老师进入教师。 因此都监听老师来了的事件。只要老师来了，张三就停止看小说，李四也不能聊天。 有个同学就望风，发现老是来了。 他喊一声：某某老是来了。 然后，张三，李四动作就激发啦。 望风报信同学，是消息的发送者。</p>
<p>实现类似上面2个功能，wordpress主要2个常用函数是：</p>
<p>add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) 添加消息主题$tag类型过滤器，过滤函数是：$function_to_add 该函数一定需要有返回值的；$priority是该函数执行优先级；数字越小将越先执行,accepted_args支持传入参数个数，默认是1。 </p>
<p>apply_filters($tag, $value) ，发送过滤主题消息，$tag消息主题，$value 发送需要过滤内容。</p>
<p>&#160;</p>
<p><strong>PHP代码执行该过程原理</strong></p>
<blockquote><p>&#160;</p>
<p>举例说明：</p>
<p>add_filter(‘the_title’,’filter_trim_title’,1,1);</p>
<p>实际实现类似：</p>
<p>$wp_filter[‘the_title’] []= array(‘function’=&gt;’filter_trim_title’…) 用一个数组列表，记录消息所有映射函数，及所有传入参数</p>
<p>如果再有一条</p>
<p>add_filter(‘the_title’,’filter_substr_title’,1,1);</p>
<p>继续执行：</p>
<p>$wp_filter[‘the_title’] []= array(‘function’=&gt;’filter_substr_title’…) ，该消息内容增加一条函数映射</p>
<p>如果这个时候，执行以下代码:apply_filters(‘the_title’,’testtest’)，代码执行将会是类似如下：</p>
<p>$args=’testtest’;</p>
<p>foreach(add_filter(‘the_title’) as $the)</p>
<p>{</p>
<p>$args = call_user_func_array($the['function'], array_slice($args, 1, (int) $the(&#8216;accepted_args&#8217;])); ///循环将该消息所有函数，执行一次，将返回的值作为下一个函数传入值。这里foreach前 会按照优先级排序</p>
<p>}</p>
<p>return $args; ///返回过滤后结果</p>
<p>&#160;</p>
</blockquote>
<p>&#160;</p>
<p>通过上面例子，会发现，添加消息过滤方法，跟发送消息可以不同地方，只要放到一个全局数组中就可以了。 你只要在开始时候，增加过滤消息映射配置，可以变得更多行。 然后，可以再任意地方，发出这类消息，并且传入输入字符。 你会发现，通过该功能做消息的过滤，将是很轻松事情。</p>
<p>&#160;</p>
<p>我们经常下会有从数据库里面读出代码，然后想做输出，这个时候，我们需要做转义操作。如果你的系统在读出内容后，添加了过滤消息发送接口，你需要对输出数据进行处理很容易。如下举例子</p>
<blockquote></blockquote>
<blockquote></blockquote>
<blockquote><p>在通用包含地方添加如下代码（functions.php是不错选择）</p>
<p>&#160;</p>
<p>add_filters(‘the_content’,’filter_contents’);</p>
<p>function filter_contents($data)&#160; </p>
<p>{</p>
<p>&#160;&#160;&#160;&#160; return htmlspecialchars($data);</p>
<p>}</p>
<p>然后在读取数据库地方加入如下代码</p>
<p>function get_content($data)</p>
<p>{</p>
<p>&#160;&#160;&#160;&#160;&#160; return apply_filters(‘the_content’,$data);&#160; //这样将$data作为消息发送，内容数据一起发送出去，所有绑定了’the_content’消息的所有函数，按照顺序串起来过滤内容。第一个过滤后结果，作为第2个输入参数，直到最后一个处理完，返回了内容。就是apply_filters 获得的内容。</p>
<p>}</p>
<p>&#160;</p>
</blockquote>
<p>&#160;</p>
<p>觉得不错吧，这种解耦方法。扩展性大大增强，在你的项目中也用下类似方法吧。 其实实现过程很容易的。 但是，带来的扩展性就非常巨大了。其它处理消息过滤器函数，还有：has_filter() current_filter() merge_filters() remove_filter() remove_all_filters() 等，感兴趣，可以去研究下 它们源码！</p>
<p>不早了，昨晚休息比较晚，今天这个时候，感觉很困了。 欢迎与我交流！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chacuo.net/89.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wordpress 3.5 filter 消息标签的名称</title>
		<link>http://blog.chacuo.net/88.html</link>
		<comments>http://blog.chacuo.net/88.html#comments</comments>
		<pubDate>Sun, 26 May 2013 15:56:41 +0000</pubDate>
		<dc:creator>程默</dc:creator>
				<category><![CDATA[web项目框架]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.chacuo.net/?p=88</guid>
		<description><![CDATA[wordpress 框架有很多优点，从前一篇“《我的博客》之从技术眼中分析wordpress结构优缺点” ，可 [...]]]></description>
				<content:encoded><![CDATA[<p>wordpress 框架有很多优点，从前一篇<u>“</u><a href="http://blog.chacuo.net/67.html"><u>《我的博客》之从技术眼中分析wordpress结构优缺点</u></a>” ，可以看到，它的消息标签在解耦方面扩展性有多强。 </p>
<p>我看了，wordpress官方手册，里面没有对所有标签进行罗列。而如果你要进行wordpress插件开发，功能扩展开发。它的消息标签，是必须要有所了解的。 以下是我收集的所有filters类的消息标签，居然有500多个。 </p>
<p>&#160;</p>
<p style="text-indent: 0px">&#8216;add_menu_classes&#8217;    <br />&#8216;admin_body_class&#8217;     <br />&#8216;admin_comment_types_dropdown&#8217;     <br />&#8216;admin_footer_text&#8217;     <br />&#8216;admin_memory_limit&#8217;     <br />&#8216;admin_post_thumbnail_html&#8217;     <br />&#8216;admin_title&#8217;     <br />&#8216;admin_url&#8217;     <br />&#8216;admired_attachment_size&#8217;     <br />&#8216;admired_author_bio_avatar_size&#8217;     <br />&#8216;admired_layout_classes&#8217;     <br />&#8216;admired_status_avatar&#8217;     <br />&#8216;admired_text&#8217;     <br />&#8216;akismet_comment_nonce&#8217;     <br />&#8216;akismet_delete_commentmeta_interval&#8217;     <br />&#8216;akismet_optimize_table&#8217;     <br />&#8216;akismet_show_user_comments_approved&#8217;     <br />&#8216;akismet_ua&#8217;     <br />&#8216;allowed_http_origin&#8217;     <br />&#8216;allowed_http_origins&#8217;     <br />&#8216;allowed_themes&#8217;     <br />&#8216;allow_subdirectory_install&#8217;     <br />&#8216;all_plugins&#8217;     <br />&#8216;all_themes&#8217;     <br />&#8216;attachment_fields_to_edit&#8217;     <br />&#8216;attachment_fields_to_save&#8217;     <br />&#8216;attachment_icon&#8217;     <br />&#8216;attachment_link&#8217;     <br />&#8216;attribute_escape&#8217;     <br />&#8216;auth_redirect_scheme&#8217;     <br />&#8216;autocomplete_users_for_site_admins&#8217;     <br />&#8216;blog_details&#8217;     <br />&#8216;blog_option_&#8217;     <br />&#8216;blog_redirect_404&#8242;     <br />&#8216;body_class&#8217;     <br />&#8216;browse-happy-notice&#8217;     <br />&#8216;bulk_actions-&#8217;     <br />&#8216;can_edit_network&#8217;     <br />&#8216;category_archive_meta&#8217;     <br />&#8216;category_description&#8217;     <br />&#8216;category_feed_link&#8217;     <br />&#8216;category_link&#8217;     <br />&#8216;close_comments_for_post_types&#8217;     <br />&#8216;comment_edit_pre&#8217;     <br />&#8216;comment_edit_redirect&#8217;     <br />&#8216;comment_form_default_fields&#8217;     <br />&#8216;comment_form_defaults&#8217;     <br />&#8216;comment_form_field_comment&#8217;     <br />&#8216;comment_form_logged_in&#8217;     <br />&#8216;comment_max_links_url&#8217;     <br />&#8216;comment_row_actions&#8217;     <br />&#8216;comments_array&#8217;     <br />&#8216;comments_open&#8217;     <br />&#8216;comments_per_page&#8217;     <br />&#8216;comments_popup_link_attributes&#8217;     <br />&#8216;comment_status_links&#8217;     <br />&#8216;comment_text&#8217;     <br />&#8216;contextual_help&#8217;     <br />&#8216;contextual_help_list&#8217;     <br />&#8216;core_version_check_locale&#8217;     <br />&#8216;cron_request&#8217;     <br />&#8216;cron_schedules&#8217;     <br />&#8216;customize_allowed_urls&#8217;     <br />&#8216;customize_value_&#8217; . $this-&gt;id_data[ 'base'     <br />'dashboard_incoming_links_feed'     <br />'dashboard_incoming_links_link'     <br />'dashboard_primary_feed'     <br />'dashboard_primary_link'     <br />'dashboard_primary_title'     <br />'dashboard_secondary_feed'     <br />'dashboard_secondary_link'     <br />'dashboard_secondary_title'     <br />'date_formats'     <br />'dbdelta_create_queries'     <br />'dbdelta_insert_queries'     <br />'dbdelta_queries'     <br />'default_content'     <br />'default_contextual_help'     <br />'default_excerpt'     <br />'default_hidden_meta_boxes'     <br />'default_option_'     <br />'default_site_option_'     <br />'default_title'     <br />'delete_site_email_content'     <br />'deprecated_argument_trigger_error'     <br />'deprecated_file_trigger_error'     <br />'deprecated_function_trigger_error'     <br />'disable_captions'     <br />'display_media_states'     <br />'display_post_states'     <br />'documentation_ignore_functions'     <br />'doing_it_wrong_trigger_error'     <br />'domain_exists'     <br />'do_mu_upgrade'     <br />'do_parse_request'     <br />'dynamic_sidebar_params'     <br />'editable_slug'     <br />'edit_bookmark_link'     <br />'edit_categories_per_page'     <br />'edit_comment_link'     <br />'editor_max_image_size'     <br />'edit_post_link'     <br />'edit_posts_per_page'     <br />'edit_profile_url'     <br />'edit_tag_link'     <br />'edit_tags_per_page'     <br />'edit_term_link'     <br />'embed_56'     <br />'embed_56com'     <br />'embed_6cn'     <br />'embed_cache_oembed_types'     <br />'embed_defaults'     <br />'embed_googlevideo'     <br />'embed_handler_html'     <br />'embed_ku6'     <br />'embed_letv'     <br />'embed_maybe_make_link'     <br />'embed_oembed_html'     <br />'embed_sina'     <br />'embed_sohu'     <br />'embed_tudou'     <br />'embed_youku'     <br />'embed_youtube'     <br />'enable_edit_any_user_configuration'     <br />'enable_post_by_email_configuration'     <br />'enable_update_services_configuration'     <br />'enter_title_here'     <br />'esc_html'     <br />'esc_textarea'     <br />'exit_on_http_head'     <br />'export_args'     <br />'ext2type'     <br />'extra_theme_headers'     <br />'feed_content_type'     <br />'force_filtered_html_on_import'     <br />'format_to_edit'     <br />'found_users_query'     <br />'gallery_style'     <br />'getarchives_join'     <br />'get_archives_link'     <br />'getarchives_where'     <br />'get_attached_file'     <br />'get_avatar_comment_types'     <br />'get_bloginfo_rss'     <br />'get_blogs_of_user'     <br />'get_bookmarks'     <br />'get_calendar'     <br />'get_categories_taxonomy'     <br />'get_comment_link'     <br />'get_comment_text'     <br />'get_delete_post_link'     <br />'get_edit_bookmark_link'     <br />'get_edit_comment_link'     <br />'get_edit_post_link'     <br />'get_edit_tag_link'     <br />'get_edit_term_link'     <br />'get_edit_user_link'     <br />'getimagesize_mimes_to_exts'     <br />'get_image_tag'     <br />'get_lastpostdate'     <br />'get_lastpostmodified'     <br />'get_media_item_args'     <br />'_get_page_link'     <br />'get_pages'     <br />'get_search_query'     <br />'get_tags'     <br />'get_terms_args'     <br />'get_terms_fields'     <br />'get_terms_orderby'     <br />'gettext'     <br />'gettext_with_context'     <br />'get_the_author_'     <br />'get_the_categories'     <br />'get_the_excerpt'     <br />'get_the_tags'     <br />'get_the_terms'     <br />'global_terms_enabled'     <br />'graceful_fail'     <br />'graceful_fail_template'     <br />'hidden_meta_boxes'     <br />'home_url'     <br />'http_headers_useragent'     <br />'http_origin'     <br />'http_request_args'     <br />'http_request_redirection_count'     <br />'http_request_timeout'     <br />'http_request_version'     <br />'http_response'     <br />'https_local_ssl_verify'     <br />'icon_dir'     <br />'icon_dirs'     <br />'icon_dir_uri'     <br />'image_add_caption_shortcode'     <br />'image_downsize'     <br />'image_editor_default_mime_type'     <br />'image_make_intermediate_size'     <br />'image_memory_limit'     <br />'image_resize_dimensions'     <br />'image_send_to_editor'     <br />'image_send_to_editor_url'     <br />'image_size_names_choose'     <br />'import_upload_size_limit'     <br />'install_plugins_nonmenu_tabs'     <br />'install_plugins_tabs'     <br />'install_themes_nonmenu_tabs'     <br />'install_themes_tabs'     <br />'intermediate_image_sizes'     <br />'intermediate_image_sizes_advanced'     <br />'is_email'     <br />'is_email_address_unsafe'     <br />'is_multi_author'     <br />'is_protected_meta'     <br />'jpeg_quality'     <br />'js_escape'     <br />'kses_allowed_protocols'     <br />'lang_codes'     <br />'list_cats'     <br />'list_pages'     <br />'load_default_embeds'     <br />'load_image_to_edit_attachmenturl'     <br />'load_image_to_edit_filesystempath'     <br />'load_image_to_edit_path'     <br />'load_textdomain_mofile'     <br />'locale'     <br />'login_form_bottom'     <br />'login_form_defaults'     <br />'login_form_middle'     <br />'login_form_top'     <br />'lostpassword_url'     <br />'manage_media_columns'     <br />'manage_pages_columns'     <br />'manage_posts_columns'     <br />'manage_' . $screen-&gt;id . '_columns'     <br />'manage_sites_action_links'     <br />'manage_taxonomies_for_attachment_columns'     <br />'manage_users_custom_column'     <br />'mce_css'     <br />'mce_spellchecker_languages'     <br />'media_meta'     <br />'media_row_actions'     <br />'media_send_to_editor'     <br />'media_upload_mime_type_links'     <br />'media_upload_tabs'     <br />'media_view_settings'     <br />'media_view_strings'     <br />'mime_types'     <br />'ms_user_row_actions'     <br />'mu_dropdown_languages'     <br />'mu_menu_items'     <br />'myblogs_blog_actions'     <br />'myblogs_options'     <br />'nav_menu_attr_title'     <br />'nav_menu_css_class'     <br />'nav_menu_description'     <br />'nav_menu_item_id'     <br />'nav_menu_items_'     <br />'nav_menu_meta_box_object'     <br />'network_home_url'     <br />'network_sites_updated_message_' . $_GET['updated']     <br />&#8216;network_site_url&#8217;     <br />&#8216;new_admin_email_content&#8217;     <br />&#8216;newblogname&#8217;     <br />&#8216;newblog_notify_siteadmin&#8217;     <br />&#8216;new_user_email_content&#8217;     <br />&#8216;newuser_notify_siteadmin&#8217;     <br />&#8216;next_comments_link_attributes&#8217;     <br />&#8216;next_posts_link_attributes&#8217;     <br />&#8216;ngettext&#8217;     <br />&#8216;ngettext_with_context&#8217;     <br />&#8216;nonce_life&#8217;     <br />&#8216;nonce_user_logged_out&#8217;     <br />&#8216;number_format_i18n&#8217;     <br />&#8216;oembed_dataparse&#8217;     <br />&#8216;oembed_fetch_url&#8217;     <br />&#8216;oembed_linktypes&#8217;     <br />&#8216;oembed_providers&#8217;     <br />&#8216;oembed_result&#8217;     <br />&#8216;option_&#8217;     <br />&#8216;option_enable_xmlrpc&#8217;     <br />&#8216;override_load_textdomain&#8217;     <br />&#8216;override_unload_textdomain&#8217;     <br />&#8216;page_attributes_dropdown_pages_args&#8217;     <br />&#8216;page_css_class&#8217;     <br />&#8216;page_link&#8217;     <br />&#8216;paginate_links&#8217;     <br />&#8216;pingback_ping_source_uri&#8217;     <br />&#8216;pingback_useragent&#8217;     <br />&#8216;pings_open&#8217;     <br />&#8216;plugin_install_action_links&#8217;     <br />&#8216;plugin_locale&#8217;     <br />&#8216;plugin_row_meta&#8217;     <br />&#8216;plupload_default_params&#8217;     <br />&#8216;plupload_default_settings&#8217;     <br />&#8216;plupload_init&#8217;     <br />&#8216;post_comments_feed_link_html&#8217;     <br />&#8216;post_date_column_time&#8217;     <br />&#8216;post_format_rewrite_base&#8217;     <br />&#8216;post_link_category&#8217;     <br />&#8216;postmeta_form_limit&#8217;     <br />&#8216;posts_request_ids&#8217;     <br />&#8216;post_thumbnail_html&#8217;     <br />&#8216;post_thumbnail_size&#8217;     <br />&#8216;post_type_archive_feed_link&#8217;     <br />&#8216;post_type_archive_link&#8217;     <br />&#8216;post_types_to_delete_with_user&#8217;     <br />&#8216;post_updated_messages&#8217;     <br />&#8216;pre_add_site_option_&#8217;     <br />&#8216;pre_comment_approved&#8217;     <br />&#8216;pre_ent2ncr&#8217;     <br />&#8216;pre_get_space_used&#8217;     <br />&#8216;pre_http_request&#8217;     <br />&#8216;pre_http_send_through_proxy&#8217;     <br />&#8216;pre_insert_term&#8217;     <br />&#8216;pre_option_&#8217;     <br />&#8216;pre_option_enable_xmlrpc&#8217;     <br />&#8216;pre_set_site_transient_&#8217;     <br />&#8216;pre_set_transient_&#8217;     <br />&#8216;pre_site_option_&#8217;     <br />&#8216;pre_site_transient_&#8217;     <br />&#8216;pre_transient_&#8217;     <br />&#8216;pre_update_option_&#8217;     <br />&#8216;pre_update_site_option_&#8217;     <br />&#8216;pre_upload_error&#8217;     <br />&#8216;pre_user_display_name&#8217;     <br />&#8216;preview_post_link&#8217;     <br />&#8216;previous_comments_link_attributes&#8217;     <br />&#8216;previous_posts_link_attributes&#8217;     <br />&#8216;print_scripts_array&#8217;     <br />&#8216;print_styles_array&#8217;     <br />&#8216;private_title_format&#8217;     <br />&#8216;protected_title_format&#8217;     <br />&#8216;pub_priv_sql_capability&#8217;     <br />&#8216;query&#8217;     <br />&#8216;quick_edit_dropdown_pages_args&#8217;     <br />&#8216;redirect_network_admin_request&#8217;     <br />&#8216;redirect_post_location&#8217;     <br />&#8216;redirect_user_admin_request&#8217;     <br />&#8216;request_filesystem_credentials&#8217;     <br />&#8216;role_has_cap&#8217;     <br />&#8216;rss_update_frequency&#8217;     <br />&#8216;rss_update_period&#8217;     <br />&#8216;safe_style_css&#8217;     <br />&#8216;salt&#8217;     <br />&#8216;sanitize_email&#8217;     <br />&#8216;sanitize_html_class&#8217;     <br />&#8216;sanitize_key&#8217;     <br />&#8216;sanitize_mime_type&#8217;     <br />&#8216;sanitize_trackback_urls&#8217;     <br />&#8216;sanitize_user&#8217;     <br />&#8216;screen_layout_columns&#8217;     <br />&#8216;screen_options_show_screen&#8217;     <br />&#8216;screen_settings&#8217;     <br />&#8216;script_loader_src&#8217;     <br />&#8216;search_link&#8217;     <br />&#8216;set_url_scheme&#8217;     <br />&#8216;show_admin_bar&#8217;     <br />&#8216;show_advanced_plugins&#8217;     <br />&#8216;show_network_site_users_add_existing_form&#8217;     <br />&#8216;show_network_site_users_add_new_form&#8217;     <br />&#8216;show_recent_comments_widget_style&#8217;     <br />&#8216;single_cat_title&#8217;     <br />&#8216;single_tag_title&#8217;     <br />&#8216;single_term_title&#8217;     <br />&#8216;site_option_&#8217;     <br />&#8216;site_transient_&#8217;     <br />&#8216;site_url&#8217;     <br />&#8216;smartadapt_attachment_size&#8217;     <br />&#8216;split_the_query&#8217;     <br />&#8216;status_header&#8217;     <br />&#8216;style_loader_src&#8217;     <br />&#8216;style_loader_tag&#8217;     <br />&#8216;stylesheet_directory&#8217;     <br />&#8216;stylesheet_directory_uri&#8217;     <br />&#8216;subdirectory_reserved_names&#8217;     <br />&#8216;tables_to_repair&#8217;     <br />&#8216;tag_archive_meta&#8217;     <br />&#8216;tag_cloud_sort&#8217;     <br />&#8216;tag_feed_link&#8217;     <br />&#8216;tag_link&#8217;     <br />&#8216;tag_row_actions&#8217;     <br />&#8216;tagsperpage&#8217;     <br />&#8216;taxonomy_feed_link&#8217;     <br />&#8216;teeny_mce_buttons&#8217;     <br />&#8216;teeny_mce_plugins&#8217;     <br />&#8216;template_directory&#8217;     <br />&#8216;template_directory_uri&#8217;     <br />&#8216;template_include&#8217;     <br />&#8216;term_name&#8217;     <br />&#8216;terms_clauses&#8217;     <br />&#8216;terms_to_edit&#8217;     <br />&#8216;the_author_posts_link&#8217;     <br />&#8216;the_category&#8217;     <br />&#8216;the_content_export&#8217;     <br />&#8216;the_content_more_link&#8217;     <br />&#8216;the_excerpt_export&#8217;     <br />&#8216;the_feed_link&#8217;     <br />&#8216;theme_action_links&#8217;     <br />&#8216;theme_install_actions&#8217;     <br />&#8216;theme_locale&#8217;     <br />&#8216;theme_root&#8217;     <br />&#8216;theme_root_uri&#8217;     <br />&#8216;theme_row_meta&#8217;     <br />&#8216;the_permalink&#8217;     <br />&#8216;the_search_query&#8217;     <br />&#8216;the_shortlink&#8217;     <br />&#8216;the_tags&#8217;     <br />&#8216;the_title&#8217;     <br />&#8216;the_title_rss&#8217;     <br />&#8216;thread_comments_depth_max&#8217;     <br />&#8216;time_formats&#8217;     <br />&#8216;transient_&#8217;     <br />&#8216;twentyeleven_attachment_size&#8217;     <br />&#8216;twentyeleven_author_bio_avatar_size&#8217;     <br />&#8216;twentyeleven_color_schemes&#8217;     <br />&#8216;twentyeleven_default_theme_options&#8217;     <br />&#8216;twentyeleven_header_image_height&#8217;     <br />&#8216;twentyeleven_header_image_width&#8217;     <br />&#8216;twentyeleven_layout_classes&#8217;     <br />&#8216;twentyeleven_layouts&#8217;     <br />&#8216;twentyeleven_status_avatar&#8217;     <br />&#8216;twentyeleven_theme_options_validate&#8217;     <br />&#8216;twentyten_attachment_height&#8217;     <br />&#8216;twentyten_attachment_size&#8217;     <br />&#8216;twentyten_author_bio_avatar_size&#8217;     <br />&#8216;twentyten_header_image_height&#8217;     <br />&#8216;twentyten_header_image_width&#8217;     <br />&#8216;twentytwelve_attachment_size&#8217;     <br />&#8216;twentytwelve_author_bio_avatar_size&#8217;     <br />&#8216;twentytwelve_status_avatar&#8217;     <br />&#8216;type_url_form_media&#8217;     <br />&#8216;update_attached_file&#8217;     <br />&#8216;update_feedback&#8217;     <br />&#8216;update_footer&#8217;     <br />&#8216;update_welcome_email&#8217;     <br />&#8216;update_welcome_subject&#8217;     <br />&#8216;update_welcome_user_email&#8217;     <br />&#8216;update_welcome_user_subject&#8217;     <br />&#8216;upload_dir&#8217;     <br />&#8216;upload_mimes&#8217;     <br />&#8216;upload_per_page&#8217;     <br />&#8216;upload_post_params&#8217;     <br />&#8216;upload_size_limit&#8217;     <br />&#8216;use_curl_transport&#8217;     <br />&#8216;use_default_gallery_style&#8217;     <br />&#8216;use_fsockopen_transport&#8217;     <br />&#8216;use_google_chrome_frame&#8217;     <br />&#8216;user_contactmethods&#8217;     <br />&#8216;user_dashboard_url&#8217;     <br />&#8216;user_has_cap&#8217;     <br />&#8216;user_row_actions&#8217;     <br />&#8216;use_streams_transport&#8217;     <br />&#8216;validate_current_theme&#8217;     <br />&#8216;validate_username&#8217;     <br />&#8216;views_&#8217;     <br />&#8216;walker_nav_menu_start_el&#8217;     <br />&#8216;whitelist_options&#8217;     <br />&#8216;widget_comments_args&#8217;     <br />&#8216;widget_posts_args&#8217;     <br />&#8216;widget_text&#8217;     <br />&#8216;widget_title&#8217;     <br />&#8216;wp_admin_bar_class&#8217;     <br />&#8216;wp_admin_css&#8217;     <br />&#8216;wp_admin_css_uri&#8217;     <br />&#8216;wp_cache_themes_persistently&#8217;     <br />&#8216;wp_checkdate&#8217;     <br />&#8216;wp_check_filetype_and_ext&#8217;     <br />&#8216;wp_check_post_lock_window&#8217;     <br />&#8216;wp_comment_reply&#8217;     <br />&#8216;wp_create_thumbnail&#8217;     <br />&#8216;wp_dashboard_widgets&#8217;     <br />&#8216;wp_default_editor&#8217;     <br />&#8216;wp_delete_file&#8217;     <br />&#8216;wp_die_ajax_handler&#8217;     <br />&#8216;wp_die_handler&#8217;     <br />&#8216;wp_die_xmlrpc_handler&#8217;     <br />&#8216;wp_dropdown_cats&#8217;     <br />&#8216;wp_edit_nav_menu_walker&#8217;     <br />&#8216;wp_editor_set_quality&#8217;     <br />&#8216;wp_feed_cache_transient_lifetime&#8217;     <br />&#8216;wp_fullscreen_buttons&#8217;     <br />&#8216;wp_generate_attachment_metadata&#8217;     <br />&#8216;wp_generate_tag_cloud&#8217;     <br />&#8216;wp_generator_type&#8217;     <br />&#8216;wp_get_attachment_image_attributes&#8217;     <br />&#8216;wp_get_attachment_link&#8217;     <br />&#8216;wp_get_attachment_metadata&#8217;     <br />&#8216;wp_get_attachment_thumb_file&#8217;     <br />&#8216;wp_get_attachment_thumb_url&#8217;     <br />&#8216;wp_get_attachment_url&#8217;     <br />&#8216;wp_get_nav_menu_items&#8217;     <br />&#8216;wp_get_nav_menus&#8217;     <br />&#8216;wp_get_update_data&#8217;     <br />&#8216;wp_handle_upload&#8217;     <br />&#8216;wp_handle_upload_prefilter&#8217;     <br />&#8216;wp_http_cookie_value&#8217;     <br />&#8216;wp_image_editors&#8217;     <br />&#8216;wp_insert_post_empty_content&#8217;     <br />&#8216;wp_insert_post_parent&#8217;     <br />&#8216;wp_is_large_network&#8217;     <br />&#8216;wp_kses_allowed_html&#8217;     <br />&#8216;wp_link_pages_args&#8217;     <br />&#8216;wp_list_bookmarks&#8217;     <br />&#8216;wp_list_categories&#8217;     <br />&#8216;wp_mail&#8217;     <br />&#8216;wp_mail_charset&#8217;     <br />&#8216;wp_mail_content_type&#8217;     <br />&#8216;wp_mail_from&#8217;     <br />&#8216;wp_mail_from_name&#8217;     <br />&#8216;wp_mime_type_icon&#8217;     <br />&#8216;wpmu_blogs_columns&#8217;     <br />&#8216;wpmu_delete_blog_upload_dir&#8217;     <br />&#8216;wpmu_drop_tables&#8217;     <br />&#8216;wpmu_signup_blog_notification_email&#8217;     <br />&#8216;wpmu_signup_blog_notification_subject&#8217;     <br />&#8216;wpmu_signup_user_notification_email&#8217;     <br />&#8216;wpmu_signup_user_notification_subject&#8217;     <br />&#8216;wpmu_users_columns&#8217;     <br />&#8216;wp_nav_menu&#8217;     <br />&#8216;wp_nav_menu_args&#8217;     <br />&#8216;wp_nav_menu_container_allowedtags&#8217;     <br />&#8216;wp_nav_menu_items&#8217;     <br />&#8216;wp_nav_menu_objects&#8217;     <br />&#8216;wp_network_dashboard_widgets&#8217;     <br />&#8216;wp_page_menu&#8217;     <br />&#8216;wp_page_menu_args&#8217;     <br />&#8216;wp_parse_str&#8217;     <br />&#8216;_wp_post_revision_fields&#8217;     <br />&#8216;wp_prepare_attachment_for_js&#8217;     <br />&#8216;wp_read_image_metadata&#8217;     <br />&#8216;wp_read_image_metadata_types&#8217;     <br />&#8216;_wp_relative_upload_path&#8217;     <br />&#8216;wp_setup_nav_menu_item&#8217;     <br />&#8216;wp_signup_location&#8217;     <br />&#8216;wp_sprintf&#8217;     <br />&#8216;wp_tag_cloud&#8217;     <br />&#8216;wp_terms_checklist_args&#8217;     <br />&#8216;wp_trim_words&#8217;     <br />&#8216;wp_unique_post_slug&#8217;     <br />&#8216;wp_unique_post_slug_is_bad_attachment_slug&#8217;     <br />&#8216;wp_unique_post_slug_is_bad_flat_slug&#8217;     <br />&#8216;wp_unique_post_slug_is_bad_hierarchical_slug&#8217;     <br />&#8216;wp_update_attachment_metadata&#8217;     <br />&#8216;wp_update_term_parent&#8217;     <br />&#8216;wp_upload_bits&#8217;     <br />&#8216;wp_user_dashboard_widgets&#8217;     <br />&#8216;wxr_export_skip_postmeta&#8217;     <br />&#8216;xmlrpc_blog_options&#8217;     <br />&#8216;xmlrpc_default_post_fields&#8217;     <br />&#8216;xmlrpc_default_posttype_fields&#8217;     <br />&#8216;xmlrpc_default_revision_fields&#8217;     <br />&#8216;xmlrpc_default_taxonomy_fields&#8217;     <br />&#8216;xmlrpc_default_user_fields&#8217;     <br />&#8216;xmlrpc_enabled&#8217;     <br />&#8216;xmlrpc_login_error&#8217;     <br />&#8216;xmlrpc_pingback_error&#8217;     <br />&#8216;xmlrpc_prepare_comment&#8217;     <br />&#8216;xmlrpc_prepare_media_item&#8217;     <br />&#8216;xmlrpc_prepare_page&#8217;     <br />&#8216;xmlrpc_prepare_post&#8217;     <br />&#8216;xmlrpc_prepare_post_type&#8217;     <br />&#8216;xmlrpc_prepare_taxonomy&#8217;     <br />&#8216;xmlrpc_prepare_term&#8217;     <br />&#8216;xmlrpc_prepare_user&#8217;     <br />&#8216;xmlrpc_wp_insert_post_data&#8217;</p>
<p style="text-indent: 0px">&#160;</p>
<p style="text-indent: 0px">今天先做一个总列表，后面我会对一些filters 消息标签作用，用户做一些收集。 这类标签基本涵盖了wordpress 所有操作功能。 能够通过filter 消息标签，将所有功能发送数据进行一次过滤。然后再作用到目标，数据源可以来自前端，数据库，或者网络接口读取。也欢迎，朋友们一起来补充这些消息标签。 </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chacuo.net/88.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《我的博客》之从技术眼中分析wordpress结构优缺点</title>
		<link>http://blog.chacuo.net/67.html</link>
		<comments>http://blog.chacuo.net/67.html#comments</comments>
		<pubDate>Sat, 25 May 2013 15:33:00 +0000</pubDate>
		<dc:creator>程默</dc:creator>
				<category><![CDATA[web性能]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.chacuo.net/?p=67</guid>
		<description><![CDATA[我还是觉得自己开辟搭建一个独立blog平台，我常用linux服务器，因此选择php环境。 这样，我可以选择的开 [...]]]></description>
				<content:encoded><![CDATA[<p>我还是觉得自己开辟搭建一个独立blog平台，我常用linux服务器，因此选择php环境。 这样，我可以选择的开源博客系统会有很多。这里不对博客系统进行纵向对比。我说下，对wordpress认识过程，一些自己的体会。纯属代表个人意见，欢迎讨论！</p>
<p>&#160;</p>
<p>刚开始，下载一套wordpress 3.5，然后一路安装下来，比较简单，跟常见其它一些开源平台查不到。 只要配置好数据库连接，然后一路下一步，分把钟就可以做好。 也是由于，对wordpress 早已经有所耳闻，而且感觉它名气很大，这类系统中佼佼者。</p>
<ul>
<li>
<h3><strong>首先看看它数据库结构吧</strong></h3>
</li>
</ul>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image9.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb9.png" width="423" height="350" /></a></p>
<p>&#160;</p>
<p>11张表，实现了强大的博客功能，首先表示不简单。现在很多cms 基本上都是40-50个表。其中很有几张表，设计为窄表，基本上类似，类型，键值名，键值。类似近年的NoSql类型数据库。都是键值对。读取灵活，扩展方便。 可能就是，开发时候复杂些。这类基本设计是：posts,postmeta表，所有文章都具备的通用字段，就放到posts表，而针对文章进行属性设置，如：访问数，tag，权限等。都放到postmeta表。如：</p>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image10.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb10.png" width="434" height="144" /></a></p>
<p>窄表，可以任意对一篇文章新增键值，扩展新的属性。 这也是wordpress 插件几乎可以做到无所能一个原因。 这类表可以非常灵活。新增一个属性，只需要在这个表里面，对posts ID 增加这类属性的一条记录。而且这类窄表，字段少，读取速度也很快。</p>
<p><u><em><font color="#ff0000">感觉到表设计不足之处(个人认为，欢迎交流）</font></em></u></p>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image11.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb11.png" width="606" height="382" /></a></p>
<p>Posts表里面字段，<u><font color="#ff0000">一张表里面，居然有6个text 字段</font></u>。如果读取时候，不小心select *,该会有多少磁盘IO,一条记录，该会占多少的数据块。记得刚刚，分析wordpress时候，当时一下子就看到这样情况。我毅然选择放弃该系统。也因此让我忽略了，他窄表设计优点。 个人认为，一些字段可以设置为varchar,另外text 可以移到单独posts_data表。里面只存放text字段,PostID 信息。欢迎高人指点。</p>
<p>&#160;</p>
<ul>
<li>
<h3><font style="font-weight: bold">再看看它的代码吧</font></h3>
</li>
</ul>
<h3><strong>&#160;</strong></h3>
<p>现在wordpress插件有成百上千个，它基本上可以做各种系统。除了blog外，它还被改成了新闻网站，企业网站，电影网站，甚至是商城系统。这些足以说明，他前端程序一定有过人的设计架构，有它足够灵活性。</p>
<ol>
<li><strong>看下他的目录结构吧</strong></li>
</ol>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image12.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb12.png" width="535" height="617" /></a></p>
<p>&#160;</p>
<p>从这些目录，真的还没有发现它比较独特优越性。现在网上常见的MVC 结构，有独立模版目录。 这个wordpress,实际只能算，MC，而没有V，它实际上前端是通过php 直接调用include 目录里面函数而已。如：</p>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image13.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb13.png" width="715" height="90" /></a></p>
<p>这个也是它的一个独特特点了，国内很多模版，都会开辟自己的标签，如smarty的是：{$smarty.config.aa} 等。 而wordpress里面没有自己标签，要读取，通过函数去读。它省去了标签省去了大家学习标签成本，但大家也需要掌握N多的函数。 可以把它的函数，理解为其其它系统中定义标签。</p>
<p>无论是函数，还是标签，只要你在前端页面都使用这些方法，去读取你要的数据，实际上都对后端数据库做了隔离。从而让使用者不关系数据库数据了。 数据库结构修改，只要调用函数做相应跳转。前端页面还可以照样那样用。而不需要任何修改。从而保证它的稳定性。</p>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image14.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb14.png" width="635" height="312" /></a></p>
<p>它函数封装，不光做到从DB读取数据，通过函数，读模版，读公共包含文件，等等都做到了，函数封装。几乎做到了，所有读取数据封装（DB,file,request中），这样封装，在目前国内系统中很少见，因为为每个功能去写一堆函数，切实很多工作量。国内框架，基本上喜欢封个方法，做到很通用，然后自己去调去吧。 这个方法，可能可以读取用户表，也可以读评论，也可以读文章。 其实，看起来很通用，实际用起来就会很复杂，也会增加上手难度。我们看看wordpress 设计方法。</p>
<p>&#160;</p>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image15.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb15.png" width="577" height="520" /></a></p>
<p>这只是其中的很少一部分函数，真正差不多1000把个函数呢。 因为，<strong><u><font color="#ff0000">wordpress 函数几乎封装了所有数据调用，因此前端开发只用调用函数，就可以完成。简单容易，这也是灵活性，及得到广泛使用一个原因。</font></u></strong></p>
<p><strong><font color="#000000">2.&#160; 看看它代码实现优点</font></strong></p>
<p><strong></strong>如果说，wordpress 光只有，强大的含数据库，做到前端页面与数据直接分离。现在很多标签调用也能做到分离。 真正wordpress灵活性，以及能够扩展出各类插件，完成独特开发功能，与它独立系统分不开。 </p>
<p>它有一个 消息机制，还有一个队列过滤模块，任务队列处理模块。这2个模块，都建立在它的一个消息机制上，普通开发方式如下：</p>
<p>消息机制，可以做到，前端跟实现地方解耦。这里打个比方，如一个用户完成注册，我要给用户发一个邮件，然后给管理员发一个站内信。我们以前做法是：</p>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image16.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb16.png" width="482" height="480" /></a></p>
<p>如果发完站内信后，还有发一个手机短信，我们必须修改注册逻辑，在接下来再增加一个发送手机短信功能。 这时，你发现任何前端修改，都需要在原先逻辑里面修改一通。 如果我们采用消息机制，程序将变为:</p>
<p><a href="http://blog.chacuo.net/wp-content/uploads/2013/05/image17.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.chacuo.net/wp-content/uploads/2013/05/image_thumb17.png" width="593" height="465" /></a></p>
<p>&#160;</p>
<p>这个图，是改用消息模式结果，用户注册功能模块，跟接收到消息处理各个任务直接，代码没有直接关联。如果需要增加一个接收注册消息，给其它人通知一下，只需要新增一个模块，订制注册消息，然后处理一个新流程即可。</p>
<p>目前各类开源项目里面，消息机制已经变得非常常见了。 但在wordpress这个blog框架，它的消息主题非常完善。几乎任何动作都有消息主题发送消息。 这样让开发者，只要订制相关主题，就可以，增加自己额外处理功能。 例如： 用户发一个帖子后。检测下用户是不是有广告信息，只要订制：发帖消息，然后，增加新功能，检测内容。发现不满足，直接屏蔽帖子。</p>
<p>有人估计要说，这类功能，现在很多框架有类似东西，例如，页面开始有个start事件，结束有个end事件。 确实，消息概念在很多框架里面确实有用。 但是，没有这么完毕的消息主题抛出。 <strong><u>几乎做到整个系统任何操作，都能有消息，这样没有什么功能不能进行扩展了</u></strong>。</p>
<p>有兴趣可以去研究下，wordpress add_filter,apply_filters ，还有add_action，apply_action ，只是收到消息后，一个按顺序进行一系列元内容过滤，一个是接收元内容，进行一系列任务。</p>
<p><strong>wordpress 2大优点，一个是函数封装数据操作，一个是它完善消息功能。</strong>那它有何种确定呢？</p>
<ul>
<li>
<h3>wordpress源码不足</h3>
</li>
</ul>
<p>&#160;</p>
<p>任何一个系统，有优点，一定有不尽人意的地方。</p>
<p>首先，因为它要做到自己很多函数，可以直接读取一些循环数据。或者直接读取数据库配置项。它启动时候，<strong>采用了大量的全局变量</strong>。一个大的blog,可能启动后全局变量有几百个。 有的是数据记录，有的是字符串，有的是对象。你可能会发现，这些数据可能有1，2M；无论有没有使用，这些都会先创建。可想而知，他将带来大量内存浪费。另外一个就是，可能会影响调用速度。 很多网友使用wordpress就明显有这个感觉了。 </p>
<p>另外一个问题，其实正式来自它的消息处理模块。 它跟我们网上看到的不一样，<strong>它的消息模块是同步模块</strong>。以上面打的比方来说，尽管做到发送消息，跟处理模块代码分离。 但实际上执行过程没有多大变化，也是要先注册用户完，然后完成一些列处理功能。最好这个php页面才算处理完了。 需要时间还是那么些。 如果真的，能把这类跟功能无关接收消息，处理模块异步到后端。 那么估计再没有人抱怨wordpress打开一个要4，5秒了。 </p>
<p>&#160;</p>
<ul>
<li>
<h3>后记：</h3>
</li>
</ul>
<h3>&#160;</h3>
<p>就说这么些了，估计很多同人告诉我说。居然它性能不好，又慢。 你干什么还要用它呢？ 这个就看你主要关注的是什么了，如果你需要快的开发模版，而且非常容易开发各种扩展。那么它是你最好选择了。 况且，性能问题，一但静态化后，几乎解决了。 </p>
<p>估计还有人说，你既然提到它性能这么些不足，那么你有什么好的调优方法没有。 呵呵，这里欢迎大家交流意见，我也有一些想法，就先不详说，还不成熟。欢迎交流！！！祝朋友们，周末愉快！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chacuo.net/67.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《我的博客》之选择公共博客平台还是自建博客站点</title>
		<link>http://blog.chacuo.net/42.html</link>
		<comments>http://blog.chacuo.net/42.html#comments</comments>
		<pubDate>Fri, 24 May 2013 11:11:15 +0000</pubDate>
		<dc:creator>程默</dc:creator>
				<category><![CDATA[学习心得]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.chacuo.net/?p=42</guid>
		<description><![CDATA[前言：看到很多同人有自己的博客，也知道它的重要性，以及带来诸多好处。 于是乎准备开始搭建一个自己的技术博客平台 [...]]]></description>
				<content:encoded><![CDATA[<p><strong>前言：</strong>看到很多同人有自己的博客，也知道它的重要性，以及带来诸多好处。 于是乎准备开始搭建一个自己的技术博客平台。分享经验教训，分享技术前瞻，聊聊自己对新鲜事务看法。 于是准备开始搭建平台了，首先遇到棘手问题就是，家按在那里呢？</p>
<p><strong>博客安家在那里呢？</strong></p>
<p>这个可能是很多朋友比较纠结的问题。自己建个博客站点，还是在公共平台申请呢？ 可能很多朋友看到很多博客公共平台上面，有些用户流量很高，访问量也多，于是打算去申请一个。这里各有各的好处，各有各的问题。 以下分析来自个人观点，欢迎交流！</p>
<p><strong>公共博客平台PK独立搭建博客</strong></p>
<p>其实，我3年前在知名博客站点，开通了博客，大概2,3 个月， 排名就进入1000多位。 后来，一直没有打理，现在每天访问量，有近千UV，不过现在我打算独立出来，搭建自己博客站点。自己搭建博客系统，跟在公共平台建博客 不同之处。 好比是一个是专卖品牌店，一个就是超市柜台档口。超市当然有自己的名气，有自己的客户，基本上你不用太多打理，你访问量也不会太少。只要，你努力经验一番，很快你人气就会大涨。但是，这时你发现很多会被限制。如：你要扩张店面，你要开辟更多东西，你要做营销广告等等。 这个时候，你发现基本上很难加入，因为你的档口大小位置空间都固定了。另外一个就是，访问量多了，也很难打造自己的品牌。 大家更多记得是超时名称，大家买的都相同。他们可能记得更清楚是，某某超时里面有个蛋糕柜台，摊主是某某某。 当然，如果你另外开店面平台，前期投入会比较大，你需要去买空间、域名，需要取找程序代码，还可能需要请专业人员装修店面。 而且，你会发现你前期投入，因为你店面很偏僻，在很久很久时候，还很少有人来光顾。这个时候，你会发现，你的付出与回报不成正比。尽管，你发现很多个人名家博客，很强大，人气很多。但是，估计他们只是千千万万博主中，坚持下来的为少数。 很多博主，或许因为看不到黎明太阳，而在五更前将平台放弃了。也有朋友说，这类博客，一定要原创，一定要经常更新，一定要坚持一年以上，才会逐渐有人气。大多数的博主，都会很快失去信心，很快不能坚持下去。其实，这个时候，你坚持下去，<strong>增加自己的知识视野远远比带来人气提升价值大多了</strong>。</p>
<p><strong>先用公共平台后搭建独立博客平台</strong></p>
<p>我的过程，可能也是很多朋友也是这样。 经常看到，默默很牛博客平台，上面某个博主搬家了。 然后，有一个自己独立博客站点。 我想这样兼顾了2种平台利弊。前期快速开展了自己的博客，锻炼了自己写作方面技巧，也积累一定人气，也有自己的朋友圈。这个时候，人气增长，发现对自己带来其它商业价值在受约束。 于是乎搭建自己的独立博客平台。 这时，你发现因为自己经验增强，对博客平台搭建等等可能更多了解。投入一小部分成本，很快有自己的平台。 由于自己在公共平台的人气，很快会带来一批用户过来。自己也会在独立平台，更卖力写作，创作。平台会逐步逐步提升，只要坚持漫长的一段时间，一定会越来越好！</p>
<p><strong>后记：</strong></p>
<p>以上是我的一个经验，欢迎交流！我也是后期打算建立自己的独立博客系统，接下来，我将继续分享，自己为什么选择wordpress原因，以及我对于该博客系统一些见解（从技术层面）。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chacuo.net/42.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《我的博客》之怎么样写好一篇技术博客</title>
		<link>http://blog.chacuo.net/27.html</link>
		<comments>http://blog.chacuo.net/27.html#comments</comments>
		<pubDate>Thu, 23 May 2013 15:50:58 +0000</pubDate>
		<dc:creator>程默</dc:creator>
				<category><![CDATA[学习心得]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.chacuo.net/?p=27</guid>
		<description><![CDATA[前言： 作为工作比较久的人员，经常会带一些新人。怎么样快速让新人能够上手，更快的成长起来，这是作为管理者需要考 [...]]]></description>
				<content:encoded><![CDATA[<p><strong>前言：</strong></p>
<p>作为工作比较久的人员，经常会带一些新人。怎么样快速让新人能够上手，更快的成长起来，这是作为管理者需要考虑问题。 一个新人，成长快慢，除了自身因素外，他的导师传递知识方式方法，我认为非常重要。你是给他鱼，还是渔呢？ 好的方法、好的事例，能够读者在轻松愉快环境中，快速掌握知识。其实，写一篇技术博客，表述你的思想，以此给人知识，也是一样道理。怎么样写好这篇博客，能够让读者轻松，愉快读完；又能收益，确实是门学问。以下是我一些观点，欢迎交流！</p>
<p><strong>1. 技术博客，站到读者角度去写</strong></p>
<p>技术类博客很常见，或是教大家某些软件、工具使用；或是分享自己经验；或是某次成长过程。我们会发现，现在教程很多，但是好的教程很少。 能够被大家推为佳作的就更少了。 要写好一篇教程，并不是傻瓜型，从头到尾逐步教读者实现就好。我想作为博主，你首先需要考虑，读者将是什么样群体，他们存在问题什么样，所掌握知识是哪些。 你如果抓住读者心里，知道他所急需要什么，而且用他能够理解的语言来表述，基本上成功了一大半了。</p>
<p><strong>2.技术博客，注意由浅入深</strong></p>
<p>一本好的技术书，销量能够上百万册，为什么会达到这样效果。除了书内容切合读者，另外一个方面，他能够让读者从中学习不断提升。在将一门技术时候，不是你一下子挖多深，然后就把读者怔住了，他膜拜你！这跟看电影不同，现在很多电影，一过来加很多很多悬念，让观影的人，一直想看结果。看书与看电影不同，看电影是消遣意义更多。而读一本技术书，跟多的是要了解，让后为己用。 这时，我们引入问题，可以跟多来自日常生活中的实例。记得当时看一本设计模式的书！里面讲为什么要用面向对象设计方法，就说中国的活字印刷。把所有文字做成一个一个字模， 以后要出书，就可以挑选文字，自由组合。如果中间有错误字，只需要把那个字模替换掉。马上有可以印刷。他主要说，面向对象让程序：易用性，扩展性，稳定性增强。 这个小小比方，大家一看就明了，而且不容易忘记。所以，当你讲一个很复杂问题时候，多联系实际，最好能够用大家见得到，摸得着的现实生活例子来打比方。 逐步深入！</p>
<p><strong>3.图文并茂</strong></p>
<p>这是我的弱项，可能是理工科原因，对于做精美图片不是很有兴趣。 但是，经常看到别人一些好的文档，好的图形介绍，真的是膜拜！ 经常有句话是：一图顶千言，有图有真相！ 有时候，你转弯抹角去表述一个实物，不如一张实际图来得快。 整好的架构图，部署图等，对于表述自己的意图很重要。 还可以让你排版变得更美观。不会让读者太沉闷！</p>
<p><strong>4.有整体大纲思路图</strong></p>
<p>你在表述一段文字前，最好是先告诉读者，你将要做什么。一句话介绍你的目的。 读者会带着这样一个框去读，当遇到一些问题，他可以联系到你框架去思考。能够快速掌握。 当然，你的一篇文档，最好在刚开始，告诉读者，你将从什么方面开始讲，接住做什么。 让读者能够首先整体把握大体思路。 不至于大段文字，把读者弄得晕头转向！</p>
<p>&#160;</p>
<p>好了，我经常去图书室看书，也经常分享自己的一些知识。 以上来自我的总结，有更好建议，意见欢迎讨论！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chacuo.net/27.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《我的博客》之新技术人员写博客好处</title>
		<link>http://blog.chacuo.net/10.html</link>
		<comments>http://blog.chacuo.net/10.html#comments</comments>
		<pubDate>Wed, 22 May 2013 04:31:53 +0000</pubDate>
		<dc:creator>程默</dc:creator>
				<category><![CDATA[学习心得]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.chacuo.net/?p=10</guid>
		<description><![CDATA[技术人员写个博客很必要 其实我从事互联网已经很多年了，从论坛到博客，到微博，到现在的微信。我都经历过，这类程序 [...]]]></description>
				<content:encoded><![CDATA[<ul>
<li>
<h3><strong>技术人员写个博客很必要</strong></h3>
</li>
</ul>
<p>其实我从事互联网已经很多年了，从论坛到博客，到微博，到现在的微信。我都经历过，这类程序看过很多，写过不少；从实现技术，开发原理都有所了解。但始终我没有一个自己的博客，好比天天在外面建房子的人，没有一个自己的房子一样。总认为，建个博客没有多大必要，也没有时间去打理。直到后来，工作久了，接触东西多了，而更重要是，老是开始忘记东西，忘记以前所学习东西，很熟悉的知识也逐渐模糊了。开始觉得，应该要多动笔，记录下。 下次忘记了，有个地方能够找到！</p>
<ul>
<li>
<h3><strong>写博客好处</strong></h3>
</li>
</ul>
<p>开始带团队了，开始培养新人了。 我也开始跟同人说，作为技术人员应该有个自己的博客。</p>
<p>1. <strong>记录学习知识</strong>，这类也是很常见的，很多技术人员博客，最初都是以摘要，转载为主。 作为一个流水账，记录零碎的知识点。把所有看到，听到的，学习到的，汇总起来，日后要使用时候，可以慢慢翻阅！这类形式，很随意，基本上对于积累知识，开阔眼界有很大帮助，但是很多知识，只是转载抄来，很容易忘记。</p>
<p>2.&#160; <strong>总结知识点，做心得体会 </strong>这类文章，来自自己的亲身经历的成功、失败的项目。通过分析，总结其中原因，找到问题关键所在。 在分析、总结、归纳后，很容易接近事情的本质，找到真实原因。&#160; 这类博客无论给读者，还是自己，都会带来很大收获。自己总结出问题本质，以后类似问题，基本不会出现错误；对于读者而言，可能作者分享事务，即将是自己所要经历的，或者也经历过的，会有一种 豁然开朗感觉！</p>
<p>3. <strong>结交朋友 </strong>特别是做IT行业，基本上技术更新很快，自己经常写写博客，分享想心得。 时间常了，经常会有一些固定朋友来光顾。线上线下可能都会有互动。 沟通聊天，了解行业动态，提升技术方面眼界。 同时，自己人脉也会得到提升！</p>
<p>4.<strong>其它 </strong>说不定，写多了，就成为行业名人了。 慕名而来的人越来越多，各种效应可能都会产生。 也说不好，成为了更大企业所物色的对象！^_^</p>
<p>记得看过一个节目说，一个人看完一本书，过了2周左右，基本忘得只剩下10%了，但是如果看完一本书，然后做好记录，大概可以记录到20%左右。 如果，做好记录后，跟其它人讲解，跟其它人分享传授。这个时候，会发现能够2周后记住30%以上，而且很久时间，还能记得很多，忘记速度会减慢！</p>
<p>不要怕自己分享总结东西被其它人所掌握，你写的东西越好，自身所需要掌握提升的也会更多，你可能技术积累到飞跃之间所需要时间越短！看过很多名家博客，人气旺的，现在很多都是在有名气的大公司了。 博客好了，不光读者多了，可能物色自己的企业更多了。 ^_^</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chacuo.net/10.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
