电影《大空头》(The Big Short)

不懂之事,自会小心;惹祸上身,皆是自以为是。” ——马克·吐温

It ain't what you don't know that gets you into trouble.It's what you know for sure that just ain't so.

——Mark Twain

让我们陷入困境的不是无知,而是看似正确的谬误论断。——马克·吐温

Everyone, deep in their hearts, is waiting for the end of the world to come.
——Haruki Murakami
其实 每个人的内心深处, 都在期待着世界末日的降临
——村上春树

batocera

官网:https://batocera.org/

Batocera,中文名被称为:巴托塞拉,它 是一个把各种游戏模拟器集中到一起的linux系统。所以它的英文的全称为Batocera.linux 。

win10找不到复选框“要使用本计算机,用户必须输入用户名和密码”的解决方法

win10在设置自动登录系统功能时,会遇到无法找到复选框“要使用本计算机,用户必须输入用户名和密码”的难题,而不能成功设置免输密码自动登录系统功能。

遇到这种情况的话,可以通过修改注册表来解决:

1.通过运行窗口中输入“regedit”打开注册表

2.依次展开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device

在“Device”下找到"DeviePasswordLessBuildVersion"项,双击修改当前值十六进制的数值为0,点击“确定”保存注册表,并重新启动电脑。

3.运行窗口中输入“netplwiz”或“controluserpasswords2”打开自动登录配置窗口,就可以看到复选框“要使用本计算机,用户必须输入用户名和密码”,然后取消勾选即可。点击确定后会要求输入自动登录的用户密码,操作一下即可实现免输密码自动登录系统功能。

4.结束。

嗡蓝静法界,乾元亨利贞

《西游记》故事里,观音找玉帝借了一路神祇,特来暗中保护唐僧,这路神祇却只伏孙悟空的点札,不听唐僧差遣。

后来,孙悟空把这路神祇奉菩萨的法旨暗保唐僧的事情,告诉了猪八戒,猪八戒却也从来没想过要学孙悟空,也差遣差遣这些神仙。

《西游记》故事里,五方揭谛,六丁六甲、四值功曹、一十八位护教伽蓝,本是玉帝的人,为什么却偏偏只伏孙悟空的点札,甘愿受孙悟空的差遣?

孙悟空真正的身份究竟是谁?玉帝为什么这般护着他?“嗡蓝静法界,乾元亨利贞”这个咒语,究竟是什么意思呢?

其实,“嗡蓝静法界”就是令三业悉皆清净的意思。念此咒语,一切罪障尽得消除,随所住处悉得清净,又能成办一切胜事。

“乾元亨利贞”是《易经》乾卦的卦辞,应该这样断句:“乾,元亨,利贞”,是“大吉,吉占”的意思。

“嗡蓝静法界,乾元亨利贞”的意思,就是消除三业,走出困境,大吉大利,无往不胜,简直就是一个无敌的咒语。

“嗡蓝静法界,乾元亨利贞”又可以理解成“释一切厄,通过西方极乐世界”,简称《西游释厄传》。

至于孙悟空真正的身份,便是玉帝在人间的化身,他是玉帝的魔头,又是人间之喜仙,能惹一切祸患,也能化解一切厄运。

五方揭谛,六丁六甲、四值功曹、一十八位护教伽蓝:

五方揭谛分别是金头揭谛、银头揭谛、波罗揭谛、波罗僧揭谛、摩诃揭谛,是佛教的五大护法神。五方揭谛掌管五个方位,各司其职。

六丁为六位阴神玉女,名号分别为丁卯、丁巳、丁未、丁酉、丁亥、丁丑;六甲为六位阳神玉男,名号为甲子、甲戌、甲申、甲午、甲辰、甲寅。

四位神祇分别是:值年神李丙 、值月神黄承乙 、值日神周登、值时神刘洪,常被供奉于城隍庙之中。

护教伽蓝,佛教认为,守护寺院之神有十八位,分别为:美音、梵音、天鼓、巧妙、叹美、广妙、雷音、师子音、妙美、梵响、人音、佛奴、叹德、广目、妙眼、彻听、彻视、遍观。

来源网络,供参考,侵删。

 

 

frp客户端配置文件frpc.toml参考

frp客户端配置文件frpc.toml参考

serverAddr = "x.x.x.x"
serverPort = 7000
auth.token = "xxxx"
webServer.addr = "127.0.0.1"
webServer.port = 7400
webServer.user = "xxxx"
webServer.password = "xxxx"
transport.tls.enable = true
transport.tls.disableCustomTLSFirstByte = true

[[proxies]]
name = "RDP"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = xx89
transport.useEncryption = true
transport.useCompression = true

[[proxies]]
name = "webdav"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9999
remotePort = xx99
transport.useEncryption = true
transport.useCompression = true

[[proxies]]
name = "frpc"
type = "http"
localIP = "127.0.0.1"
localPort = 7400
subdomain = "frpc"
transport.useEncryption = true
transport.useCompression = true

{{- range $_, $v := parseNumberRangePair "20,21,xx01-x03" "xx1,xx1,xx01-xx03" }}
[[proxies]]
name = "ftp-{{ $v.First }}"
type = "tcp"
localIP = "127.0.0.1"
localPort = {{ $v.First }}
remotePort = {{ $v.Second }}
transport.useEncryption = true
transport.useCompression = true
{{- end }}

本例子中含:常用的远程服务RDP,文件系统webdav以及ftp和网页服务http.

 

《反悔》

作者张之路,男

天上下着雪。我一个人孤伶伶地走在去万方家的路上。雪花在路灯前飞舞,路灯在雪花中发出昏暗的光。
我和万方家只隔一百多米,可是我却走了好久好久。白天我们还在这里举行百米赛跑,那时候,这条路显得又平又直,可现在下雪了。我一个人慢慢地走着,脚下发出吱吱的声响……
吃过晚饭,我趴在桌子上背诵今天课堂上刚刚讲过的杠杆原理。妈妈坐在沙发上织毛衣。我常常抬起头来望着窗外飞舞的雪花——我们这里已经很少下这样大的雪了。真带劲!明天可以打雪仗啰!
妈妈走了过来,轻轻地把窗帘拉上。
另一间屋子里,爸爸和奶奶正在看电视。咚咚锵锵的锣鼓声传了过来,又是京戏!我用双手把耳朵堵上。妈妈走了出去,电视机的声音变小了。妈妈又重新走到我的身边,慈爱地把我的手从耳朵上拿了下来。
“那只羚羊哪儿去啦?”妈妈突然问我。
她说的羚羊是一只用黑色硬木雕成的艺术品。它一直放在我桌子的犄角上。我的心咚咚跳了起来,因为我已经把它送给我的好朋友万方了。
“你不是说送给我了么?”我喃喃地说。
“当然是送给你了,可是现在它在哪儿?”妈妈好像是发现了什么秘密,两眼紧紧地盯着我。事情严重了。
“我把它收起来了。”我也不知道我怎么会撒了谎。
“收在哪儿了?拿来我看看。”妈妈一点也不放松。
我只好坐在那儿,一动不动。低着头不敢看她的眼睛。
“说实话……是不是拿出去卖啦?”妈妈变得十分严厉起来,“我决不允许!”
“没有……妈……我送给别人了。”我都快哭了,连忙解释着。 “送给谁了,告诉我!”妈妈用手摇着我的肩膀。
“送给万方了。”
“你现在就去把它要回来!”妈妈坚定地说,“要不我和你一起去!
“不!”我哭着喊了起来。
爸爸走了进来,他坐在那里听妈妈讲完了事情的过程,并没有发火。他点着一支烟,慢慢地对我说:“小孩子之间怎么能自作主张地把家里东西送给别人呢!这是不对的,不信的话,你明天问问老师……把这样珍贵的东西送人,他也会反对的……呢?”
“可……这是我的东西呀!”
“是,这是爸爸妈妈给你的,可并没有允许你送给别人呀!”
我没有理由了。爸爸说的话总是让人找不出毛病在哪儿。我知道,那黑色的羚羊是爸爸从非洲带回来的纪念品,是爸爸非常喜欢的东西。可是,当我想到我要去向我的好朋友要回它的时候,我的心里难过极了。他们不知道,万方是个多么仗义的好朋友呀!
万方从开始上小学就和我在一起。他学习很好,他还特别喜欢帮助人。有力气,可以在单杠上一连做十个引体向上。他可从来不欺负别人。
那一天上体育课,我们全班都穿上刚买的新运动衣——就是那种海蓝色的,袖子和裤脚上都缀着三条白边儿的那种。可是在我们闹着玩的时候,我的裤子被树杈划了一个长长的口子。我坐在地上使劲地哭。因为我特别怕妈妈骂我。万方也不玩了,他坐在我的旁边一个劲地叹气。忽然,他把自己的裤子脱下来对我说:“咱俩换了吧,我妈是裁缝,她能把裤子补得看不出破绽来。”我当时,居然相信了他的话,就把裤子和他换了。后来我才知道,为了那条裤子,他妈妈让他对着墙站了半个钟头。
我要把裤子换过来。他却说:“反正我已经罚完站了,要是换回来,你还得挨说,就这样吧!”
那天,万方到我家来玩。我见他特别喜欢我桌上的羚羊,连想都没想就送给了他:“咱俩永远是好朋友……永远!”他也挺激动,还把一柄心爱的小刀送给我……想到这儿,我哭了。
不知什么时候,奶奶站在门口。她小声说:“算了吧,下次记住就行啦,孩子们也要讲个信用……送给别人的东西怎么好意思再要回来呢!”
妈妈忍不住喊起来:“您总是惯着他,您知道那是多么贵重的东西呀!”
爸爸不说话,他只是默默地坐在沙发上,一个劲地抽烟。
这样,我的心里就更难过了。我已经不是小孩子啦,我都要上中学了。我默默地从抽屉里拿出万方送给我的小刀,飞快地跑出门去……
万方的家到了,我上了三楼,轻轻地敲了门。门开了,万方伸出头来,看见是我,一把把我拉进屋里去。
“万方……”我站在过道里不肯再往里走。
“你怎么啦?”万方焦急地问我。
我慢慢从口袋里掏出小刀说:“你能不能把羚羊……换回去。”我的声音小得几乎听不见。
万方没有说话,他咬着嘴唇,两眼紧紧盯着我。我低下头不敢看他。我们就这样默默地站着。
好一会儿,万方说:“你怎么会这样呢?白天我们不是说得好好的吗?难道我们不是好朋友吗?”
我忍不住哭泣起来。万方的妈妈从里面走出来问我怎么回事。我说不出,只是一个劲儿掉眼泪。她又回头问万方。
万方说:“他要把送给我的东西要回去!”
万方的妈妈顺手给了万方屁股一巴掌:“小孩子之间怎么能换东西呢,快去把人家的东西拿来!”
万方站在那里没动。他妈妈又推了他一下,他才不情愿地走了。
过了一会儿,万方从屋里走出来,手里托着那只羚羊,他还为羚羊做了一个小玻璃框子,也一起拿了出来。他妈妈接过来一看说:“哎呀!你怎么能要人家这么贵重的东西呢?!”他把羚羊递到我的手上,“好好拿着,我呆会儿说他!”
我把小刀和玻璃框子放到他妈妈的手里,正要和万方说话,他已经不见了。
我慢慢地从楼梯上走下来。外面的雪已经下得很大了,雪花落在羚羊的身上,又滑了下去。我突然觉得羚羊变得那么重,以至于我不得不用双手托着它。我在雪地里慢慢地走着,忽然,我听见后面传来万方的声音。我惊奇地回过头。万方气喘吁吁地跑到我的眼前,他既没有戴帽子,也没有穿棉衣。他把手里拿的玻璃罩子盖在我的羚羊上,又把小刀塞到我的手里说:“拿着,没有礼物,咱俩也是好朋友!”
“你妈妈会说你的!”我看着他的眼睛。
“没事儿,凡是爸爸妈妈送给我的东西,不管我给谁他们都没说的……”他十分爽朗地微笑着,露出那像白雪一样的牙齿。
“明天打雪仗,来早点!”万方跑了,还不时地扬起手臂向我打招呼。渐渐的,他消失在雪花飞舞的世界里面了。
我哭了,我真的嚎啕大哭起来。雪花和泪水一起落在玻璃罩上。我从来没有这样伤心过。

 

恩,就是《羚羊木雕》的原版,《羚羊木雕》是被改编过入的课本。

据说是作者本人讲过这些话:

我的短篇小说《羚羊木雕》写于1984年,发表在同年第10期的《东方少年》上面。作品发表时的名称叫做,《反悔》,选编到人民教育出版社出版的初一课本第22课时被改名叫《羚羊木雕》。

有一天,一位在中学教语文的朋友给我打电话,说她正在教学生学习“我的课文”,我很惊讶!她说课文的署名就是我,又说说故事大概,我确信那就是我的文章《反悔》。我问清了这篇课文是选在初一语文的第一册上后,来到出版社。我对一位编辑说,听说我的文章被编在初一课本上,我想看看!他说他这里没有这个课本。我有些失望的看着他身背后的书柜,透过玻璃,我看见一本书的书脊上清楚的写着《九年制教育语文课本第一册》的字样!我请他让我看看。打开课本,果然看到了我的文章《羚羊木雕》和我的署名。我问这位编辑能不能给本书当纪念,他说没有书!然后把我的联系电话用铅笔写在台历上,说以后和我联系……我只好来到位于北京东单的课本门市部,买了一本“我的课本”,后来我那位当中学老师的朋友又送给我一本她用过的课本。于是,在我的书架上至今放这一新一旧的两本初一语文课本,留作纪念。

《羚羊木雕》被选编在中学课本里已经20多年了。想想第一届读过这篇作品的学生如今已经是三十多岁的人了。再想想有多少学生曾经读过这篇文章,那何止是成千上万啊!我感到非常高兴和欣慰。

写这篇小说的时候,我已经在电影制片厂当编辑。可是十多年教师生涯中和同学们同事们的友情还历历在目,记忆犹新。

在我的书架上摆着一个比我的手掌稍大一些的羚羊造型的木雕,黝黑的木质焕发着柔和的光泽。这个羚羊木雕线条简练而传神,腿长身短,显得矫健有力,两只犄角并不是写实的浑圆,而是写意的棱角分明,高高竖立在头的上方,神采飞扬。

这是一位教英语的姓李的老师送给我的礼物。有一天我到她的家里做客,看到这只木雕,我说好!第二天上班的时候她把木雕放到我的桌上说,送给你吧!我很惊讶说,这怎么好呢?她说,有什么不好呢,喜欢就送给你吧!说完她转身走了,并不觉得送给了我什么珍贵的东西。我很感动。如果说我的写作有什么动机的话,这个羚羊木雕无疑是最初创作的诱因和灵感。

送给别人礼物是孩子们当然也是成人之间经常发生的事情,它是人们表达友情的一种方式。送给别人礼物后又把礼物要回来的事情也是有的,尤其在孩子们之间,大部分是因为彼此闹了别扭,要回礼物似乎表达了“绝交”的态度,对于“香三臭四”的孩子这是不足为奇的。当然这也是件挺没脸挺幼稚的事情!还有些时候就是我在文章里写到的——家长认为礼物的“价值”过高。孩子不懂事,然后让孩子要回来的。

我萌生了这样一个想法,送礼物的事情可以写成一篇小说,礼物就是眼前这只比较贵重的羚羊木雕。至于是不是告诉孩子要讲信用?是不是表现家长不理解孩子?以至于是不是批评家长重财轻义?说实话,在写作的时候还来不及想,要想的就是写出人物之间的关系和矛盾以及他们的矛盾心理!争取做到每个人的行为和语言站在他的角度上似乎都是和合理的。文章写得有意思了,意义可能就在其中了。但有一点是可以肯定的,那就是作者的立场是站在同情孩子一方的!

编入课本的时候,编者对文章作了比较大的改动,除了题目之外,首先改动的是主人公的性别,我的朋友万方原来是个男生,现在在课文里改称万芳,被称为“她”,这样一改,编者在书中也被理解为女生了。由于这样的改动,我和万芳在课文里的表现就不是那么准确和顺畅了。比如万芳和我换礼物的时候,从兜里掏出一把弯弯的小藏刀送给我,女孩子玩小藏刀让人感到稍稍有些别扭。课文中的另外一个细节就是我和万芳在体育课换裤子,虽然课文中已经删掉了“忽然,他把自己的裤子脱下来”这样的句子,把地点移到树底下,换好了拍拍屁股,还嘿嘿的笑,读起来还是让人有一种生硬的感觉!

我在网上看到的《羚羊木雕》的教案中有的称“我”是女作家,是不是受到课本中女生的暗示?

第二,删去了前面的五个小小的自然段落。在结尾的部分也作了较大的改动。文章原来的结尾是:

我慢慢地从楼梯上走下来。外面的雪已经下得很大了,雪花落在羚羊的身上,又滑了下去。我突然觉得羚羊变得那么重,以至于我不得不用双手托着它。我在雪地里慢慢地走着,忽然,我听见后面传来万方的声音。我惊奇地回过头。万方气喘吁吁地跑到我的眼前,他既没有戴帽子,也没有穿棉衣。他把手里拿的玻璃罩子盖在我的羚羊上,又把小刀塞到我的手里说:“拿着,没有礼物,咱俩也是好朋友!”

“你妈妈会说你的!”我看着他的眼睛。

“没事儿,凡是爸爸妈妈送给我的东西,不管我给谁他们都没说的……”他十分爽朗地微笑着,露出那像白雪一样的牙齿。

“明天打雪仗,来早点!”万方跑了,还不时地扬起手臂向我打招呼。渐渐的,他消失在雪花飞舞的世界里面了。

我哭了,我真的嚎啕大哭起来。雪花和泪水一起落在玻璃罩上。我从来没有这样伤心过。

而改动后的结尾是:

我一个人慢慢地走在路上。月亮出来了,冷冷的,我不禁打了个寒颤。路上一点声音也没有。忽然,我听见有人在喊我的名字,我回过头,只见万芳跑了过来。她把小刀塞到我的手里说:“你拿着,咱俩还是好朋友……"

我呆呆地望着她,止不住流下了眼泪。我觉得我是世界上最伤心的人!因为我对朋友反悔了。我做了一件多么不光彩的事呀!

可是,这能全怪我吗?

最后加上的这句话,我以为有些直露了。

还有对于文章中几个不太重要的人物“台词”的改动,比如我的奶奶,万方的妈妈,她们在文章里只有一两句台词。正是这一两句台词被改变了,缩减了,使她们的人物性格发生了变化。

比如“我”到万方家要羚羊木雕,万方妈妈知道后——原来文章中说:“你怎么能要人家这么贵重的东西呢?” ,“好好拿着,我呆会儿说他!”改动以后说“你怎么能拿人家这么贵重的东西呢?!”,“好好拿着,我呆会儿揍他!”

再比如奶奶在原文是小声说:“算了吧,下次记住就行啦,孩子们也要讲个信用……送给别人的东西怎么好再要回来呢!”而在课文中却被简化为,“算了吧,这样多不好。”

对于这些改动,我理解课本编者的苦心和课本作为范本必须体现教学目的的意图。但这些改动有成功也有值得商榷的地方。

在这期间许多杂志的编辑希望我讲讲写这篇作品的背景和动机。我没有动笔,总觉得写作是件很“偶然”的事情,并没有什么明确的想法,似乎没有什么好说的,书写在作者,而理解在读者!

及至我在互联网上看到大量的关于这篇文章的教案。有些老师还把我当成女作家,我感到又热闹又奇怪!于是我想写写有关的情况,希望能给教学这篇课文的老师和同学提供点微小的帮助!

 

Windows/Office原版镜像下载

Windows/Office原版镜像下载

https://massgrave.dev/genuine-installation-media.html

该网站为激活工具Microsoft Activation Scripts (MAS)官网,提供了所有版本的Windows/Office原版镜像下载

Microsoft Activation Scripts (MAS)开源地址:https://github.com/massgravel/Microsoft-Activation-Scripts/

 

台湾版辭典数据库资源下载

来源于台湾省教育部

教育部國語辭典公眾授權網网址:https://language.moe.gov.tw/001/Upload/Files/site_content/M0001/respub/index.html

内容为繁体版。

可以下载辭典所有数据,文字,图片及音频资源。

新手司机第一次单独上路,老司机们有什么建议吗?

初次踏上驾驶之路的新手司机,如同初学者步入未知的学术殿堂,既充满期待,又难免忐忑。他们面临的挑战主要集中在对交通法规的掌握、危险识别能力的欠缺以及对车辆配置功能的不熟悉。在这个关键时刻,老司机们累积的经验与智慧犹如一盏明灯,为新手照亮前行的道路。以下便是老司机们为新手司机初次单独上路提供的几点核心建议:

一、深入研习,严守交规

理论奠基:扎实的理论知识是安全驾驶的基石。新手司机需深入学习道路交通法规,全面理解交通标志、标线的含义。驾驶教材、教学视频、线上课程等多样化学习资源为理论学习提供了便捷途径。

实战预演:每次出行前,新手应预先熟悉目的地路线,知晓沿途可能出现的交通信号、限速规定、禁行区域等,做到心中有预案。实时关注交通法规动态,确保自身的驾驶行为始终与时俱进,符合最新的法律法规要求。

二、洞察风险,智慧避险

借力资源:专业驾驶教育平台如“梦飞驾道”等,通过书籍、公众号等形式,深度剖析驾驶过程中的危险点与应对策略。新手可从中汲取经验,提升对常见驾驶场景中潜在风险的认知。

专注观测:驾驶过程中,保持高度警觉,时刻关注路面情况、周边车辆动态、行人及非机动车行为,特别注意视线盲区和交叉路口等事故高发区域。

预见驾驶:基于前方路况、车流速度、天气等因素,提前做出判断并调整车速、车距,以平缓的操作替代紧急制动或突兀变道,实现驾驶过程的平稳与安全。

三、善用科技,驾驭爱车

科技助力:现代车辆配备的先进驾驶辅助系统,如360度全景影像,能直观呈现车辆周围环境,极大减轻新手在停车、通过狭窄路段或复杂交通环境时的压力。车道保持辅助系统则提供额外安全保障,但新手需了解其工作原理及局限性,避免过度依赖。

基础操作熟稔:确保对车辆各项基础操作如灯光开关、雨刮器、空调、音响等的熟练掌握,以便在驾驶过程中能快速、准确地进行调整,避免因操作复杂设备而分散注意力。

四、塑造良好驾驶习惯

告别陋习:坚决杜绝变道不打灯、强行变道、忽视交通标志、滥用远光灯、超速行驶、不系安全带、开车使用手机等不良驾驶行为,它们不仅危及自身安全,也破坏道路交通秩序。

心态调适:保持冷静、耐心,尤其在面对复杂路况或他人不规范驾驶时,避免情绪波动影响判断。良好的驾驶心态是安全驾驶的重要组成部分。

科学规划:建议新手司机在初期选择平峰时段和熟悉道路进行驾驶练习,随着技能提升,再逐步挑战复杂路况和高峰期驾驶。每次出行后进行反思总结,不断提升应对各类驾驶情境的能力。

五、在实践中成长

循序渐进:新手应从简单的道路和低流量时段起步,逐步过渡到复杂路况和高峰期驾驶,通过不断的实践积累经验,提升驾驶技能。

资深指导:如有条件,新手可邀请经验丰富的驾驶员陪同指导,他们能及时发现并纠正问题,传授宝贵的实战技巧,加速新手的成长进程。

总结而言,新手司机初次单独上路应以守法为本、洞察危险、智慧避险为行动指南,积极利用科技辅助工具,同时注重心态调适与良好驾驶习惯的塑造。唯有如此,新手才能在每一次出行中稳步提升,最终蜕变为一位自信且负责任的驾驶员,而非依赖运气侥幸行车。牢记:安全驾驶不仅是对自己负责,也是对他人和社会的尊重与贡献。

-----------------上面的文章内容由AI通过下面的内容优化而来----------------------------

开车这件事,无非几点:

1.不懂交规;

2.不懂危险点;

3.车辆配置;

下面简单说一下:

遵守交规是安全行驶的必要条件,不然在违法的情况下,安全只是运气。

车辆盲区及常见的危险,这个要靠经验积累,或者借鉴别人总结的:梦飞驾道有出了三本书,可以公众号搜索:梦飞驾道

车辆配置这个事,建议借助360影像,关注自身车辆的行驶位置,特别是窄路。另外车道保持也可以借助。

不要相信别人说的那些建议:什么开慢车,别人会让你,开几次就会了。

记住:守法,知危险,会避险,了解车,这是开车安全的基本要求。

靠运气只会让交通环境越来越差。

看看那些陋习:

变道不打灯,强制变道,不会看交通标志,乱开远光灯,超速行驶,不系安全带,开车玩手机打电话等等。

wordpress添加post_type自定义内容类型

wordpress默认的内容模型只有文章,如果想增加其它的,就要使用到  post_type,通过post_type自定义内容模型,例如影视,图片,链接等模型。

只需在主题的function.php文件中添加对应post_type代码即可。

相关注释说明:

# 在 'init' 钩子上注册自定义文章类型.
add_action('init', 'my_register_post_types');

/**
* 注册插件需要的文章类型
*
* @since 1.0.0
* @access public
* @return void
*/
function my_register_post_types()
{

// 设置文章类型参数
$args = (

// 文章类型的简介,貌似没有在 WordPress 内核中使用,不过我们可以在主题或插件中使用
'description' => __('This is a description for my post type.', 'wprs'),
// 字符串

// 文章类型是否公开给管理员或者前端用户使用,这个参数的值是后面很多参数的默认值
'public' => true,
// bool (default is FALSE)

// 是否可以在前端作为 parse_request() 的一部分查询该文章类型
'publicly_queryable' => true,
// bool (默认为 'public' 参数的值).

// 是否在前端搜索中隐藏该文章类型
'exclude_from_search' => false,
// bool (默认为 'public' 反值)

// 是否可以在导航菜单中选择
'show_in_nav_menus' => false,
// bool (默认为 'public' 参数的值)

// 是否在管理界面生成默认的管理界面,使用后面的参数,可以控制生成的 UI 组件,如果我们要构建自己的管理界面,
//设置该参数为 False
'show_ui' => true,
// bool (默认为 'public' 的值)

// 是否在管理菜单中显示,'show_ui' 参数必须设置为 True,这个参数才有效,我们页可以设置该参数为一个顶级菜单
//(如:'tools.php'),这种情况下,该文章类型的管理菜单出现在 Tools 菜单下面
'show_in_menu' => true,
// bool (默认为 'show_ui' 的值)

// 是否在管理工具条中显示该文章类型,如果设置为 true,WordPress 会在管理工具条中添加一个新建该文章类型文章的链接
'show_in_admin_bar' => true,
// bool (默认为 'show_in_menu' 的值)

// 该文章类型在管理菜单中出现的位置,'show_in_menu' 必须设置为 true,该参数才有用
'menu_position' => null,
// int (默认为 25 - 出现在「评论」菜单后面)

// 管理菜单的图标 URI,或者 Dashicon 的类名称. 参见: https://developer.wordpress.org/resource/dashicons/
'menu_icon' => null,
// 字符串 (默认使用文章图标)

// 属于该文章类型的文章是否可以通过 WordPress 导入/导出插件或者类型的插件导出
'can_export' => true,
// bool (默认为 TRUE)

// 是否暴露在 Rest API 中
'show_in_rest',
// 布尔值,默认为 false

// 使用 Rest API 访问的基础 URI 别名
'rest_base',
// 字符串,默认为文章类型别名

// 使用自定义 Rest API 控制器而不是默认的 WP_REST_Posts_Controller,自定义控制器必须继承 WP_REST_Controller
'rest_controller_class',
// 字符串,默认为 WP_REST_Posts_Controller

// 是否在删除用户时,删除他们撰写的文章
'delete_with_user' => false,
// bool (如果文章类型支持 ‘author’ 功能,该参数默认为 TRUE)

// 该文章类型是否支持多级文章(父级文章/子文章/等等.)
'hierarchical' => false,
// bool (默认为 FALSE)

// 是否为该文章类型开启存档页面 index/archive/root 页面,如果设置为 TRUE, 该文章类型名称将作为存档页面别名使用,
//当然,我们页可以设置自定义存档别名
'has_archive' => 'example',
// bool|string (默认为 FALSE)

// 为该文章类型设置 query_var 键,如果设置为 TRUE, 将使用文章类型名称,如果需要,也可以设置自定义字符串
'query_var' => 'example',
// bool|string (默认为 TRUE - 文章类型名称)

// 用于构建该文章类型的编辑、删除、阅读权限的字符串,可以设置字符串或者数组,如果单词的负数不是加“s”的形式,我们需要
//设置一个数组,array( 'box', 'boxes' )
'capability_type' => 'example',
// string|array (默认为 'post')

// 是否让 WordPress 映射权限元数据 (edit_post, read_post, delete_post),如果设置为 FALSE, 我们需要自己通过
//过滤 “map_meta_cap” 钩子来设置文章类型权限
'map_meta_cap' => true,
// bool (默认为 FALSE)

// 设置更精确的文章类型权限,WordPress 默认使用 'capability_type' 参数来构建权限,多数情况下,我们不需要像文章
//或页面这么完整的权限,下面是我经常使用的几个权限: 'manage_examples', 'edit_examples', 'create_examples'.
// 每个文章类型都是独特的,我们可以根据需要调整这些权限
'capabilities' => (

// meta caps (don't assign these to roles)
'edit_post' => 'edit_example',
'read_post' => 'read_example',
'delete_post' => 'delete_example',

// primitive/meta caps
'create_posts' => 'create_examples',

// primitive caps used outside of map_meta_cap()
'edit_posts' => 'edit_examples',
'edit_others_posts' => 'manage_examples',
'publish_posts' => 'manage_examples',
'read_private_posts' => 'read',

// primitive caps used inside of map_meta_cap()
'read' => 'read',
'delete_posts' => 'manage_examples',
'delete_private_posts' => 'manage_examples',
'delete_published_posts' => 'manage_examples',
'delete_others_posts' => 'manage_examples',
'edit_private_posts' => 'edit_examples',
'edit_published_posts' => 'edit_examples',
),

// 定义该文章类型的 URL 结构,我们可以设置一个具体的参数或一个布尔值,如果设置为 false,该文章类型将不支持
// URL Rewrite 功能
'rewrite' => (

// 文章类型的别名
'slug' => 'example', // string (默认为文章类型名称)

// 是否在固定链接中显示 $wp_rewrite->front 文章类型别名
'with_front' => false, // bool (默认为 TRUE)

// 是否允许文章类型中的文章通过 <!--nextpage--> 快捷标签实现分页
'pages' => true, // bool (默认为 TRUE)

// 是否为订阅源创建漂亮的固定链接feeds.
'feeds' => true, // bool (默认为 'has_archive' 的值)

// 为固定链接设置设置 endpoint 遮罩
'ep_mask' => EP_PERMALINK, // const (默认为 EP_PERMALINK)
),

// 文章类型支持的 WordPress 功能,许多参数在文章编辑界面非常有用。这有助于其他主题和插件决定让用户使用什么功能
//或者提供什么数据,我们可以为该参数设置一个数组,也可以设置为 false,以防止添加任何功能,文章类型创建后,我们
//可以使用 add_post_type_support() 添加功能,或使用 remove_post_type_support() 删除功能。默认功能是“标题
//”和“编辑器”。
'supports' => (
'title',// 文章标题 ($post->post_title).
'editor', // 文章内容 ($post->post_content).
'excerpt', // 文章摘要 ($post->post_excerpt).
'author', // 文章作者 ($post->post_author).
'thumbnail',// 特色图像 (当前站点使用的主题必须支持 'post-thumbnails').
'comments', // 显示评论元数据盒子,如果设置了该值, 这个文章类型将支持评论
'trackbacks', // 在编辑界面显示允许发送链接通知的元数据盒子
'custom-fields', // 显示自定义字段元数据盒子
'revisions', // 显示版本元数据盒子,如果设置了该参数,WordPress 将在数据库中保存文章版本
'page-attributes', // 显示“页面属性”元数据盒子,包含父级页面或页面排序字段。
'post-formats',// 显示文章格式元数据盒子,并允许该文章类型使用文章格式
),
// 标签用来在管理界面或前端显示该文章类型的名称,标签参数不会自动改写文章更新、错误等信息中的字段,我们需要过滤
// 'post_updated_messages' 钩子来自定义这些消息。
'labels' => (
'name' => __('Posts', 'wprs'),
'singular_name' => __('Post', 'wprs'),
'menu_name' => __('Posts', 'wprs'),
'name_admin_bar' => __('Posts', 'wprs'),
'add_new' => __('Add New', 'wprs'),
'add_new_item' => __('Add New Post', 'wprs'),
'edit_item' => __('Edit Post', 'wprs'),
'new_item' => __('New Post', 'wprs'),
'view_item' => __('View Post', 'wprs'),
'search_items' => __('Search Posts', 'wprs'),
'not_found' => __('No posts found', 'wprs'),
'not_found_in_trash' => __('No posts found in trash', 'wprs'),
'all_items' => __('All Posts', 'wprs'),
'featured_image' => __('Featured Image', 'wprs'),
'set_featured_image' => __('Set featured image', 'wprs'),
'remove_featured_image' => __('Remove featured image', 'wprs'),
'use_featured_image' => __('Use as featred image', 'wprs'),
'insert_into_item' => __('Insert into post', 'wprs'),
'uploaded_to_this_item' => __('Uploaded to this post', 'wprs'),
'views' => __('Filter posts list', 'wprs'),
'pagination' => __('Posts list navigation', 'wprs'),
'list' => __('Posts list', 'wprs'),

// 只在分级文章类型中使用的标签
'parent_item' => __('Parent Post', 'wprs'),
'parent_item_colon' => __('Parent Post:', 'wprs'),
),
);

// 注册文章类型
register_post_type(
'example', // 文章类型名称,最多 20 个字符,不支持大写或空格
$args // 文章类型的参数
);

}

post_type自定义产品模型参考:

// Register Custom Post Type
function products_post_type() {

$labels = array(
'name' => _x( 'Products', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( 'Product', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( 'Products', 'text_domain' ),
'name_admin_bar' => __( 'Product', 'text_domain' ),
'archives' => __( 'Item Archives', 'text_domain' ),
'attributes' => __( 'Item Attributes', 'text_domain' ),
'parent_item_colon' => __( 'Parent Product:', 'text_domain' ),
'all_items' => __( 'All Products', 'text_domain' ),
'add_new_item' => __( 'Add New Product', 'text_domain' ),
'add_new' => __( 'New Product', 'text_domain' ),
'new_item' => __( 'New Item', 'text_domain' ),
'edit_item' => __( 'Edit Product', 'text_domain' ),
'update_item' => __( 'Update Product', 'text_domain' ),
'view_item' => __( 'View Product', 'text_domain' ),
'view_items' => __( 'View Items', 'text_domain' ),
'search_items' => __( 'Search products', 'text_domain' ),
'not_found' => __( 'No products found', 'text_domain' ),
'not_found_in_trash' => __( 'No products found in Trash', 'text_domain' ),
'featured_image' => __( 'Featured Image', 'text_domain' ),
'set_featured_image' => __( 'Set featured image', 'text_domain' ),
'remove_featured_image' => __( 'Remove featured image', 'text_domain' ),
'use_featured_image' => __( 'Use as featured image', 'text_domain' ),
'insert_into_item' => __( 'Insert into item', 'text_domain' ),
'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ),
'items_list' => __( 'Items list', 'text_domain' ),
'items_list_navigation' => __( 'Items list navigation', 'text_domain' ),
'filter_items_list' => __( 'Filter items list', 'text_domain' ),
);
$args = array(
'label' => __( 'Product', 'text_domain' ),
'description' => __( 'Product information pages.', 'text_domain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'thumbnail', 'comments', 'custom-fields' ),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'page',
);
register_post_type( 'product', $args );

}
add_action( 'init', 'products_post_type', 0 );

文章模型参考:

// Register Custom Post Type
function articles_post_type() {

$labels = array(
'name' => _x( 'Articles', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( 'Article', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( 'Articles', 'text_domain' ),
'name_admin_bar' => __( 'Article', 'text_domain' ),
'archives' => __( 'Item Archives', 'text_domain' ),
'attributes' => __( 'Item Attributes', 'text_domain' ),
'parent_item_colon' => __( 'Parent Item:', 'text_domain' ),
'all_items' => __( 'All Items', 'text_domain' ),
'add_new_item' => __( 'Add New Item', 'text_domain' ),
'add_new' => __( 'Add New', 'text_domain' ),
'new_item' => __( 'New Item', 'text_domain' ),
'edit_item' => __( 'Edit Item', 'text_domain' ),
'update_item' => __( 'Update Item', 'text_domain' ),
'view_item' => __( 'View Item', 'text_domain' ),
'view_items' => __( 'View Items', 'text_domain' ),
'search_items' => __( 'Search Item', 'text_domain' ),
'not_found' => __( 'Not found', 'text_domain' ),
'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ),
'featured_image' => __( 'Featured Image', 'text_domain' ),
'set_featured_image' => __( 'Set featured image', 'text_domain' ),
'remove_featured_image' => __( 'Remove featured image', 'text_domain' ),
'use_featured_image' => __( 'Use as featured image', 'text_domain' ),
'insert_into_item' => __( 'Insert into item', 'text_domain' ),
'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ),
'items_list' => __( 'Items list', 'text_domain' ),
'items_list_navigation' => __( 'Items list navigation', 'text_domain' ),
'filter_items_list' => __( 'Filter items list', 'text_domain' ),
);
$args = array(
'label' => __( 'Article', 'text_domain' ),
'description' => __( 'Site articles.', 'text_domain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'thumbnail', 'comments', 'revisions' ),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'page',
);
register_post_type( 'articles', $args );

}
add_action( 'init', 'articles_post_type', 0 );

添加自定义 Meta Box 需要用到 add_meta_box 函数,注册一个 Meta Box :

add_action( 'add_meta_boxes', 'movie_director' );
function movie_director() {
add_meta_box(
'movie_director',
'电影导演',
'movie_director_meta_box',
'movie',
'side',
'low'
);
}

然后在配置参数里面指定了回调函数 movie_director_meta_box,我们需要在这个函数里面创建表单:

function movie_director_meta_box($post) {
// 创建临时隐藏表单,为了安全
wp_nonce_field( 'movie_director_meta_box', 'movie_director_meta_box_nonce' );
// 获取之前存储的值
$value = get_post_meta( $post->ID, '_movie_director', true );
?>
<label for="movie_director"></label>
<input type="text" id="movie_director" name="movie_director" value="" placeholder="输入导演名称" >
<?php
}

自定义 Meta Box 数据的保存

add_action( 'save_post', 'movie_director_save_meta_box' );
function movie_director_save_meta_box($post_id){
// 安全检查
// 检查是否发送了一次性隐藏表单内容(判断是否为第三者模拟提交)
if ( ! isset( $_POST['movie_director_meta_box_nonce'] ) ) {
return;
}
// 判断隐藏表单的值与之前是否相同
if ( ! wp_verify_nonce( $_POST['movie_director_meta_box_nonce'], 'movie_director_meta_box' ) ) {
return;
}
// 判断该用户是否有权限
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
// 判断 Meta Box 是否为空
if ( ! isset( $_POST['movie_director'] ) ) {
return;
}
$movie_director = sanitize_text_field( $_POST['movie_director'] );
update_post_meta( $post_id, '_movie_director', $movie_director );
}

输出自定义 Meta Box 数据参考:

echo '导演:'.get_post_meta( get_the_ID(), '_movie_director', true );

后台列表中显示更多字段,使用 manage_$post_type_posts_custom_column 即可实现

add_action("manage_posts_custom_column", "movie_custom_columns");
add_filter("manage_edit-movie_columns", "movie_edit_columns");
function movie_custom_columns($column){
global $post;
switch ($column) {
case "movie_director":
echo get_post_meta( $post->ID, '_movie_director', true );
break;
}
}
function movie_edit_columns($columns){
$columns['movie_director'] = '导演';
return $columns;
}

即添加了列导演字段,并从每篇文章中读取出来。

 

调用自定义post_type内容模型方法,需要在主题function.php文件添加 pre_get_posts 这个 action 处理:

add_action( 'pre_get_posts', 'add_my_post_types_to_query' );
function add_my_post_types_to_query( $query ) {
if ( is_home() && $query->is_main_query() )
$query->set( 'post_type', array( 'post', 'page', 'movie' ) );
return $query;
}

在上面的 $query 变量里面设置的 post_type 数组就是要在主循环里面展示的内容,将你的自定义 Post Type 填写进去就可以在首页中显示出来了。

新建product的post_type模板archive-product.php,代码参考:

<?php $args = array( 'post_type' => 'product', 'posts_per_page' => 10);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div class="col-4">
<a href="<?php the_permalink(); ?>" class="item wow zoomIn"> 
<b><?php the_title(); ?></b>
</div>
</a>
</div>
<?php endwhile; ?>
<?php
the_posts_pagination( array(
'mid_size' => 2,
'prev_text' => __( 'Prev', 'textdomain' ),
'next_text' => __( 'Next', 'textdomain' ),
) );
?>

本文参考:

https://www.cnblogs.com/ytkah/p/11868158.html

https://www.cnblogs.com/ytkah/p/11926186.html

https://blog.wpjam.com/article/wordpress-post-type/