2020-03
13

减法

By xrspook @ 8:47:49 归类于: 烂日记

插件能解决的问题,为什么要自己写代码呢?东拼西凑代码就能解决的问题,为什么还要把那加到小工具里呢?我也不知道我为什么要这么纠结,以前我从来没有这么纠结过,但是那是以前。回看10年前自己做的WordPress模板,从现在的角度去考虑,其实很多地方我已经冥思苦想了,因为至今要我给出一个更好的解决方案,尚且无能。当时,我之所以把这个模板叫做COLOR3。因为英语的THREE和FREE的发音比较类似,完全翻译成中文就是色彩飞扬,因为我在模板里面加入了好多颜色,几乎可以说是五颜六色。我用了很多颜色,但是我几乎没用图片。整个模板里我只用了三张小图。为了找到那三张适合的图,我寻觅了不少图库。在那个时候我的这种做法是比较大胆的,因为基本上主流好看的模板都需要有不少小型图片支持,之所以是小型,是因为即便只是小小的一块图片也可以通过横向纵向重复的方式扩展成无限大小的大图案。从好看的角度考虑,背景用一大张高像素的图当然厉害,但是大图的体积也非常大。如果遇到网速不好,又或者服务器糟糕的话,非常有可能路人已经看完了你的网站,你的背景图片都还没加载出来。在我设计COLOR3的时候,我非常注重网站的加载速度,因为我的blog的服务器放在国外,所以从中国访问速度肯定会有点慢。也正是因为我在模板里几乎没有加入图片,所以我不需要考虑把网站的图片放哪里这种问题。不过我为网站设定了一个ico。那个东西极小,但是一旦被收藏,可以有很高的识别度。设计模板的时候我没加图片,因为我觉得真正吸引读者目光的应该是文章本身。可能是文章的文字,可能是文章的配图。从前好长一段时间,每篇文章我都几乎会配图,但是后来,配图这种事对我来说变成极小概率事件。从2014年夏天开始到2020年,在这超过15年里,我每天都写至少一篇。5400多篇日志,想想都觉得很疯狂。对别人来说,基本上数不出什么当年今日的日志有多少,但我可以数出一大堆。所以很多人blog里版块的链接有随机文章,相关文章,最近文章,热评文章之类的东西,但是对我来说,一个当年今日已经足够震撼了。刚好当年今日这个功能,其实根本没必要用插件去实现,简单的语句就可以做到。在10年前,我做COLOR3的时候,我就把插件的语句直接放到了模板的function里面。但是,那只是把php引用的代码具体的模板里,是定死的。那种自由远不如把当年今日做成一个小工具。小工具意味着可以对不同功能的东西进行区块管理。几乎可以这么说,有无限排列组合的可能。对低端人士来说,你有多少个箱子、有多少个工具,你就只能对那些进行排列组合,但是,对高端人士来说,无论是小工具还是放小工具的箱子,都是想有多少,就有多少的。之前,我只会创造箱子,但昨天,我连小工具都有点懂得该如何模仿组装了。

10年前,我通过插件让blog在文章链接上面开了挂。10年后,我选择的是要开挂,自己来,能节省,就绝不开挂。

2010-08
26

当年今日入rss啦

By xrspook @ 23:02:56 归类于: 烂日记

众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

上星期已经把“当年今日”功能加到blog里(详细见Arm 2 W),从一开始就打算要加入rss的,但费尽九牛二虎之力都没做到,但今天,终于攻克了!

到底什么原因呢?

首先,我们要看我当年今日的源代码,利用

< ?php wp_today();? >

完成插入,在function.php的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function wp_today(){
	$title = "<h3>当年今日</h3>";
	$limit = 10;
	$order = "latest";
	$post = 1;
	$feed = 1;
 
 
	global $wpdb;
	$post_year = get_the_time('Y');
	$post_month = get_the_time('m');
	$post_day = get_the_time('j');
	if($order == "latest"){ $order = "DESC";} else { $order = '';}
 
	$sql = "select ID, date(post_date_gmt) as h_date, post_title, comment_count FROM 
			$wpdb->posts WHERE post_password = '' AND post_type = 'post' AND post_status = 'publish'
			AND year(post_date_gmt)!='$post_year' AND month(post_date_gmt)='$post_month' AND day(post_date_gmt)='$post_day'
			order by post_date_gmt $order limit $limit";
	$histtory_post = $wpdb->get_results($sql);
	if( $histtory_post ){
		foreach( $histtory_post as $post ){
			$h_date = $post->h_date;
			$h_post_title = $post->post_title;
			$h_permalink = get_permalink( $post->ID );
			$h_comments = $post->comment_count;
			$h_post .= "<li>$h_date -- <a href='".$h_permalink."' title='Permanent Link to ".$h_post_title."'>$h_post_title</a> <!--($h_comments) --></li>";
		}
	}
 
	if ( $h_post ){
		$result = "".$title."<ul>".$h_post."</ul>";
	}
	echo $result;	
}

这堆代码,要实现在blog的某个位置输出当年今日没有任何问题,但要注意,数据是用“echo $result;”完结的,这就埋下了伏笔。

我试过很多回,试图在function.php加入以下这堆代码调用上面的代码实现当年今日在rss中的输出:

1
2
3
4
5
6
7
8
9
10
function wp_today_rss($content){
    if (is_feed()){
		$content = $content.wp_today();
		return $content;
	}
	else {
		return $content;
	}
}
add_filter('the_content', 'wp_today_rss');

输出是能输出了,但结果很囧,见图:

当年今日输出在了正文前面!(那堆乱码东西是正文),但代码中我明明是这般写的“$content = $content.wp_today();”,东西应该加在后面的,但实际上却在前面,这让我百思不得其解。

无可奈何,今天试过用最笨的方法把wp_today()除echo $result;以外的数据全部往function wp_today_rss里放,能实现了我希望的效果,见图:

到底怎么办呢?难道要很笨地把同1段代码写2回?????

狂抓不已,于是就去请教别人了,但一请教,人家还没回答我就有了头绪,不如把上面两段代码拆分为3段,即:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function get_today(){
	$title = "<h3>当年今日</h3>";
	$limit = 10;
	$order = "latest";
	$post = 1;
	$feed = 1;
 
 
	global $wpdb;
	$post_year = get_the_time('Y');
	$post_month = get_the_time('m');
	$post_day = get_the_time('j');
	if($order == "latest"){ $order = "DESC";} else { $order = '';}
 
	$sql = "select ID, date(post_date_gmt) as h_date, post_title, comment_count FROM 
			$wpdb->posts WHERE post_password = '' AND post_type = 'post' AND post_status = 'publish'
			AND year(post_date_gmt)!='$post_year' AND month(post_date_gmt)='$post_month' AND day(post_date_gmt)='$post_day'
			order by post_date_gmt $order limit $limit";
	$histtory_post = $wpdb->get_results($sql);
	if( $histtory_post ){
		foreach( $histtory_post as $post ){
			$h_date = $post->h_date;
			$h_post_title = $post->post_title;
			$h_permalink = get_permalink( $post->ID );
			$h_comments = $post->comment_count;
			$h_post .= "<li>$h_date -- <a href='".$h_permalink."' title='Permanent Link to ".$h_post_title."'>$h_post_title</a> <!--($h_comments) --></li>";
		}
	}
 
	if ( $h_post ){
		$result = "".$title."<ul>".$h_post."</ul>";
	}
	return $result;
}
function wp_today(){
	echo get_today();
}
function wp_today_rss($content){
    if (is_feed()){
		$content = $content.get_today();
		return $content;
	}
	else {
		return $content;
	}
}
add_filter('the_content', 'wp_today_rss');

嘿嘿,对味!function get_today()是核心代码,function wp_today()用作来打印输出,function wp_today_rss()使之能加入到rss中。哈,“echo $result;”换成了“return $result;”解决了纠结我很久的千古难题。只能叹一句,从前的函数调用没领会透,也没有认真留意数据返回那些事。

最后,终于把问题解决了,爽得飞天,哈哈哈~~~~

PS:感谢SH童鞋的鼎力支持!

PS2:代码可能在rss中不能全部显示,有需要者请移步网页。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress