基于wordpress主题制作的具体实现步骤


Posted in PHP onMay 10, 2013
<?php
/*
在根目录 -> wp-content -> themes 下创建mytheme文件夹用来存放创建新主题模板
在mytheme目录下创建 index.php ,style.css 两个文件,在wp后台 外观->主题 中就可以看到刚创建的主题
打开style.css文件输入
*/
?>
/*
Theme Name: 这里填主题名称
Theme URI: 这里填主题介绍的网址,没有就填你的博客网址吧
Description:这里填主题的简短介绍
Author: 作者名
Author URI: 作者的网址
Version: 版本号
Tags: 标签,多个用半角逗号隔开
*/
<?php
/*
在后台主题管理中即可看到主题相关信息,css中主题信息内容必须用注释符号括起来
找一个300*225的png图片,命名为 screenshot.png 放在主题目录下(mytheme文件夹中),在主题管理页中即可看到新建主题的预览图片
//==================================================header================================================================
可以把网站相同头内容放在一个头文件中,在主题目录下新建 header.php 文件向其中输入输入 统一的头部内容
在 index.php 或想调用该header.php页面的页面中 输入
*/
get_header(); //get_header()就相当于将header.php中的代码拷贝到当前的php文件
/*
在主题管理页面,该主题实时预览中,默认打开的 index.php 页面中即可引入 header.php 页面的内容
header.php 将会被所有的模板页面(主页、分类页、页面、标签页等)所包含,所以 header.php 中代码应该是动态的。
不同页面的title都是不一样,而且title的设置还会直接影响到SEO的效果,所以这里应该谨慎设置。下面提供一种SEO优化的title写法,
在header.php页面添加
*/
?>
<title>
<?php
if (is_home ()) { // is_home() 当前页面为主页时返回true
    bloginfo ( 'name' ); // 返回站点标题
    echo " - ";
    bloginfo ( 'description' ); // 返回站点副标题,站点描述
} elseif (is_category ()) { // is_category() 当前页面为分类页时返回true
    single_cat_title ();
    echo " - ";
    bloginfo ( 'name' );
} elseif (is_single () || is_page ()) { // is_single() 当前页面为单文章页时返回true 。 is_page() 当前页面为单页面时返回true
    single_post_title ();
} elseif (is_search ()) { // is_search() 当前页面为搜索页时返回true
    echo "搜索结果";
    echo " - ";
    bloginfo ( 'name' );
} elseif (is_404 ()) { // is_404() 当前页面为404页时返回true
    echo '页面未找到!';
} else {
    wp_title ( '', true );
}
?>
</title>
<?php
/*
 以上添加的php代码运用了条件判断,针对不同的页面采用不同title
在 header.php 页面中添加默认 style.css 文件
*/
?>
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />
<?php
/*
bloginfo('stylesheet_url');返回的是主题默认style.css文件绝对网址路径,如
http://localhost/wordpress/wp-content/themes/myTheme/style.css
bloginfo('template_url');返回的是主题目录的绝对网址路径,可以用来模板中连接样式图片,如
http://localhost/wordpress/wp-content/themes/mytheme
添加 pingback 通告功能,在header.php页面 <head> 标签中里面添加代码:
*/
?>
<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />
<?php
/*
添加订阅feed链接,在header.php页面 <head> 标签中添加:
*/
?>
<link rel="alternate" type="application/rss+xml" title="RSS 2.0 - 所有文章" href="<?php echo get_bloginfo('rss2_url'); ?>" />
<link rel="alternate" type="application/rss+xml" title="RSS 2.0 - 所有评论" href="<?php bloginfo('comments_rss2_url'); ?>" />
<?php
/*
添加wp_head,有些插件需要在网页头部添加一些js或css,要让这些插件能够正常的工作,也让主题有更好的兼容性,应该添加wp_head()函数
header.php 页面 <head> 标签中添加
*/
?>
<?php wp_head(); //用于包含WordPress程序输出头部信息 ?>
<?php
/*
显示菜单栏,这里只在菜单栏中列出分类页和page页面,可以根据喜好来列出想要的。header.php中
*/
?>
<ul id="navigation" class="grid_8">
    <?php wp_list_categories(); //用于列出博客分类页 ?>
    <?php wp_list_pages('depth=1&title_li=0&sort_column=menu_order'); //用于列出博客页面,可不填参数 ?>
</ul>
<?php
//==================================================footer================================================================
/*
footer.php与header.php差不多,写这个文件的目的也是为了精简代码,提高代码的重用性。
在主题目录中创建 footer.php ,在 index.php 或想调用该footer.php页面的页面中使用
*/
get_footer();//功能和get_header()类似
/*
在footer.php页面添加 wp_footer提高兼容性
*/
wp_footer();
/*
wp_footer()和wp_head()差不多,都是用于提高主题兼容性,毕竟有很多插件要在页脚输出一些东西才能正常工作。
*/
//==================================================sidebar================================================================
/*
在主题目录下新建 sidebar.php 页面,在 index.php 或想调用该sidebar.php页面的页面中添加
*/
get_sidebar();
/*
调用 sidebar.php 页面内容
为使WordPress后台 -> 外观 -> 小工具,可以正常地拖动小工具到侧边栏
在 sidebar.php 页面的列表格式应按如下举例格式
*/
?>
<div>
    <?php
    if (! function_exists ( 'dynamic_sidebar' ) || ! dynamic_sidebar ( 'First_sidebar' )) ://First_sidebar为widget名称,要和functions.php中对应的widget name相同
    ?>
    <h4>分类目录</h4>
    <ul>
    <?php wp_list_categories('depth=1&title_li=&orderby=id&show_count=0&hide_empty=1&child_of=0'); ?>
    </ul>
    <?php endif; ?>

    <?php
    if (! function_exists ( 'dynamic_sidebar' ) || ! dynamic_sidebar ( 'Second_sidebar' )) :
    ?>
    <h4>最新文章</h4>
    <ul>
    <?php
    $posts = get_posts ( 'numberposts=6&orderby=post_date' );
    foreach ( $posts as $post ) {
        setup_postdata ( $post );
        echo '<li><a href="' . get_permalink () . '">' . get_the_title () . '</a></li>';
    }
    $post = $posts [0];
    ?>
    </ul>
    <?php endif; ?>

    <?php
    if (! function_exists ( 'dynamic_sidebar' ) || ! dynamic_sidebar ( 'Third_sidebar' )) :
    ?>
    <h4>标签云</h4>
    <p><?php wp_tag_cloud('smallest=8&largest=22'); ?></p>
    <?php endif; ?>

    <?php
    if (! function_exists ( 'dynamic_sidebar' ) || ! dynamic_sidebar ( 'Fourth_sidebar' )) :
    ?>
    <h4>文章存档</h4>
    <ul>
    <?php wp_get_archives('limit=10'); ?>
    </ul>
    <?php endif; ?>
</div>
<?php
/*
同时在主题目录下创建 functions.php 文件内容为
*/
/** widgets */
if( function_exists('register_sidebar') ) {
    register_sidebar(array(
        'name' => 'First_sidebar', //name就是给widget指定各自的名称,以便在sidebar.php中分别调用.所以只需要给这两个widget取两个名字就好了。
        'before_widget' => '', //定义Widget内容的前后标识符的语句
        'after_widget' => '',
        'before_title' => '<h4>', //定义Widget标题的前后标识符的语句
        'after_title' => '</h4>'
    ));
    register_sidebar(array(
        'name' => 'Second_sidebar',
        'before_widget' => '',
        'after_widget' => '',
        'before_title' => '<h4>',
        'after_title' => '</h4>'
    ));
    register_sidebar(array(
        'name' => 'Third_sidebar',
        'before_widget' => '',
        'after_widget' => '',
        'before_title' => '<h4>',
        'after_title' => '</h4>'
    ));
    register_sidebar(array(
        'name' => 'Fourth_sidebar',
        'before_widget' => '',
        'after_widget' => '',
        'before_title' => '<h4>',
        'after_title' => '</h4>'
    ));
}
/*
这样WordPress后台 -> 外观 -> 小工具,就可以正常地拖动小工具到侧边栏了
制作index.php 文章列表
例子
*/
?>
<div class="grid_8">
    <!-- Blog Post -->
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div class="post">
        <!-- Post Title -->
        <h3 class="title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h3>
        <!-- Post Data -->
        <p class="sub"><?php the_tags('标签:', ', ', ''); ?> • <?php the_time('Y年n月j日') ?> • <?php comments_popup_link('0 条评论', '1 条评论', '% 条评论', '', '评论已关闭'); ?><?php edit_post_link('编辑', ' • ', ''); ?></p>
        <div class="hr dotted clearfix"> </div>
        <!-- Post Image -->
        <img class="thumb" alt="" src="<?php bloginfo('template_url'); ?>/images/610x150.gif" />
        <!-- Post Content -->
        <?php //the_excerpt(); ?>
        <?php the_content('阅读全文...'); ?>
        <!-- Read More Button -->
        <p class="clearfix"><a href="<?php the_permalink(); ?>" class="button right">阅读全文</a></p>
    </div>
    <div class="hr clearfix"> </div>
    <?php endwhile; ?>
    <!-- Blog Navigation -->
    <p class="clearfix"><?php previous_posts_link('<< 查看新文章', 0); ?> <span class="float right"><?php next_posts_link('查看旧文章 >>', 0); ?></span></p>
    <?php else : ?>
    <h3 class="title"><a href="#" rel="bookmark">未找到</a></h3>
    <p>没有找到任何文章!</p>
    <?php endif; ?>
</div>
<?php
/*
have_posts();       判断是否有下一个文章
the_post();         改变当前文章指向到下一个文章
the_permalink();    当前指向文章的连接地址
the_title();        当前指向文章的标题
the_tags('标签:');  当前指向文章的标签
comments_popup_link('0 条评论', '1 条评论', '% 条评论', '', '评论已关闭');    显示打印当前指向文章的评论链接
edit_post_link('编辑', ' • ', '');    当前指向文章,显示打印当前指向文章的编辑链接
the_excerpt();                 当前指向文章,只要在写文章的时候在"摘要"框内填写摘要,在首页显示的就是摘要,如果不填就输出全文!
the_content('阅读全文...');    用于输出当前指向文章全文,除非在文章中使用了<!-- more -->
the_permalink();              返回当前指向文章阅读全文的连接地址
previous_posts_link('<< 查看新文章', 0); 显示打印当前显示列表分页连接(每页文章数量取决于在后台设置每页可显示的文章数量)
next_posts_link('查看旧文章 >>', 0);      显示打印当前显示列表分页连接
the_time('Y年n月j日');显示日期如 1999年5月1日
另外,还有个存档页面的模板archive.php,跟index.php的制作过程完全一样,只不过需要在functions.php里添加一个函数
单文章页single.php,可以根据index.php页往这里添加自己想要显示的内容
page.php 也就是页面,博客上的所有网页都是页面,这里指的页面一个单独的页面,如"关于"、"联系方式"等,可以在WordPress后台 ? 页面,进行页面的添加修改等。
可根据之前函数添加本页内容
*/
while (have_posts()) :
    the_post(); update_post_caches($posts);
endwhile;
/*
update_post_caches($posts);  该函数重置文章缓存且未被记录。仅在页面的第一次循环检索到文章子集时,第二次循环可执行基本循环。
常用函数
get_avatar($comment, 48);       获取评论者的gravatar头像,尺寸为48 * 48
comment_reply_link()                 回复留言的链接
get_comment_time('Y-m-d H:i');       获取评论发布时间
edit_comment_link('修改');           管理员修改评论的链接
comment_text()                       输出评论内容
is_user_logged_in()                  判断用户是否登录
wp_login_url( get_permalink() );     博客登录地址
get_comment_author_link()            用于获取评论者博客地址
$comment_author                      读取cookie,如果该用户之前已经发表过评论则自动帮助用户填写用户名
$comment_author_email                读取cookie,如果该用户之前已经发表过评论则自动帮助用户填写Email
$comment_author_url                  读取cookie,如果该用户之前已经发表过评论则自动帮助用户填写博客地址
do_action(‘comment_form', $post->ID) 该函数为某些插件预留
wp_logout_url(get_permalink())       退出登录的链接
*/
/*
创建模板文件
*/

/*
 Template Name: 自建模板
*/
/*
 模板文件中添加如上注释代码,模板文件名任意,在新建页面时模板选择即可显示 自建模板 来使用此模板
可添加想要的模板样式及页面内容,新建页面时只填标题不写内容,相当创建一个页面链接地址,新建页面存在 数据前缀_posts 表中
获取到页面地址后,在写地址时可在后添加参数,则转到该页时可通过$_GET,$_POST接收
可以单独建一个表存储地址,及所属页面类型,及各页面子父级关系,在插件中进行控制

wordpress固定链接
如果修改wordpress固定链接不好用,在apache配置文件 httpd.conf 中打开选项
#LoadModule rewrite_module modules/mod_rewrite.so
把前面 # 去掉,并把所有 AllowOverride None 改成 AllowOverride all
如果不是Apache服务器,而是用的IIS调试的话,那就得去安装一个“ISAPI_Rewrite3_0069_Lite.msi”筛选器,然后在站点设置里面将PHP置为优先级。
创建小工具
在主题目录下新建自定义文件 mytool.php 文件名任意,内容任意
然后在 functions.php 中添加如下代码
*/
register_sidebar_widget ( "我的小工具", "mytool_fun" ); // "我的小工具"为后台显示小工具名称,mytool_fun为引入自建小工具页面内容的方法名
function mytool_fun() {
    include (TEMPLATEPATH . "/mytool.php");
}
/*
在后台小工具中即可看到自定义的小工具,添加后,前台页面即可看到自建小工具页面的内容
*/
?>
PHP 相关文章推荐
PHP动态图像的创建
Oct 09 PHP
十天学会php之第九天
Oct 09 PHP
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
Dec 02 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
PHP实现git部署的方法教程
Dec 19 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 21 PHP
php Hex RGB颜色值互换的使用
May 10 #PHP
基于PHP生成静态页的实现方法
May 10 #PHP
深入PHP数据缓存的使用说明
May 10 #PHP
基于PHP常用函数的用法详解
May 10 #PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 #PHP
PHP 自定义错误处理函数的使用详解
May 10 #PHP
PHP 类相关函数的使用详解
May 10 #PHP
You might like
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
解决c++调用python中文乱码问题
2020/07/29 Python
Html5元素及基本语法详解
2016/08/02 HTML / CSS
电脑销售顾问自荐信
2014/01/29 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记