西门的后花园

一个热爱网络的年轻人的博客

完美实现WordPress自定义增加删除个人资料并且展示文章页

因为朋友的主题是多作者,他需要一个在文章页展示作者名片(个人资料)的功能,所以就搜索了一下相关文章。还算顺利,搜到几篇,但一直没有达到我想要的完美效果。经过询问PHP以及函数,终于搞定了这个问题。(至少Google里绝对搜不到我这么完美的方法)

先说一下要做的效果。首先是每个会员都会在后台有“我的资料”一栏,我相信这里很少人会用,因为都不是国内不常用的。所以现在要把不常用的删掉,改成常用的新浪微博、腾讯微博等。

个人资料

下面是核心代码,加到主题文件夹functions.php里:

//设置个人资料相关选项
function my_profile( $contactmethods ) {
	$contactmethods['weibo_sina'] = '新浪微博';   //增加
	$contactmethods['weibo_tx'] = '腾讯微博';
	unset($contactmethods['aim']);   //删除
	unset($contactmethods['yim']);
	unset($contactmethods['jabber']);
	return $contactmethods;
}
add_filter('user_contactmethods','my_profile');

这个时候仅仅只是在后台有填写的文本框,实际上一点用都没!我们要的效果是在每篇文章里展示出来,所以要把数据都输出到页面上。

普通版:在single.php你觉得合适的位置加代码:


以上是我在网上搜到的资料。如果就这么一点东西,我也不会写这篇文章了。下面是搜索不到的代码。

完美版:以上一段PHP代码会存在一个致命的弱点。因为他代码只输出文本框里填写的内容,比如一个新浪微博的超级链接。如果你是主题制作者,你要在页面上输出新浪微博的链接,你肯定会写一个a标签,然后href里插入上面代码:

新浪微博

但实际使用中,不可能每个作者都有新浪微博,所以有的人这里没有填写是空的。而到了页面上,“新浪微博”四个字还在,但是href里是空的,这就非常不友好了。所以要做个判断。


新浪微博"; ?>

这里把之前的the_author_meta()换成了get_the_author_meta()来做判断非空,是因为zww告诉我the_author_meta()是直接输出,而get_the_author_meta()是有返回值,所以可以作为判断的条件。这是我试了好久都不成功的原因啊!(20130810注:the_是带echo输出,所以无法判断;get_the_是原始值,所以可以判断,输入需要加echo)

以上一小段PHP是我写的,我不懂PHP,有不对的地方欢迎大家批评指正。我只知道,我要的效果确实达到了!(个人资料项不为空时,正常输出;个人资料项为空时,不输出文字超链接)

个人资料

具体CSS还没写,但是数据都取出来了。我取了4个,分别是作者头像、作者个人说明、作者新浪微博、作者腾讯微博。自己去扩展吧。

感谢zww的指点;
用到的文章:
http://wange.im/diy-profile-in-wordpress.html
http://codex.wordpress.org/Function_Reference/the_author_meta
http://codex.wordpress.org/Function_Reference/get_the_author_meta

评论列表

  1. 这个不错,不过很少有人注册,也很少有人开放注册,就算开放也没几个注册。

  2. 不错,先收藏了。像我这种单人博客,又追求简单粗暴,估计就直接HTML写在文章后面了。哈哈。

  3. 技术文章啊,折腾wp、很费时间和精力

  4. 可惜我用Emlog啦 😉

  5. 😈 代码盲表示用的42区插件~~还可以请作者吃饭哟。求人请吃饭。

  6. 西门技术流~php完全看不懂e 🙁

  7. 博主的文章很不错,经常来光顾。希望能看到更好的文章。欢迎回访!

  8. 哇哇。不过现在好像暂时用不到这个。学习了。 🙄

  9. 其实这个完全可以用简单的HTML实现的,我一直就是这样弄的

  10. 😈 马克马克,有见地

  11. 技术流,mark一下,以后可能用的到

  12. 西门写老多经典WordPress代码了,哈哈 😀

  13. 我也是个半吊子PHP 不是很懂为何要这么写,改成这样不行么
    <?php
    if (get_the_author_meta('weibo_sina')){
    echo "<a href=\" . get_the_author_meta('weibo_sina') . \" target=\"_blank\">新浪微博</a>";
    ?>
    echo的几个转义还没仔细看过调试,应该是都要转吧? 感觉这样干净些 不过都是一个结果~ 嘿嘿

    • 我给你个不专业的PHP回答 😈
      PHP输出双引号里面,要么改用单引号,用么用斜杠转。 😆
      我可不保证我说的是正确的哟! 😈

  14. 看起来很厉害的样子啊。

  15. 有耐心+善折腾=good good! ❗

  16. 不错。。。。。

  17. 灰常NICE~ ❗
    改天改一下, 哈哈.

  18. 不错。。。经典!

  19. 技术篇!暂时用不上

  20. 今天找了很久,终于找到这了

  21. 不错,收藏

  22. 这个不错嘛,改开给加进新皮里

  23. 这样好的文章果然还是要用谷歌来搜索

检讨书进行回复 取消回复

分类目录