<?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="/blog_article/</php bloginfo(.html'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="/blog_article/</php bloginfo(.html'pingback_url'); ?>" />
<?php
/*
添加订阅feed链接,在header.php页面 <head> 标签中添加:
*/
?>
<link rel="alternate" type="application/rss+xml" title="RSS 2.0 - 所有文章" href="/blog_article/</php echo get_bloginfo(.html'rss2_url'); ?>" />
<link rel="alternate" type="application/rss+xml" title="RSS 2.0 - 所有评论" href="/blog_article/</php bloginfo(.html'comments_rss2_url'); ?>" />
<?php
/*
添加wp_head,有些插件需要在网页头部添加一些js或css,要让这些插件能够正常的工作,也让主题有更好的兼容性,应该添加wp_head()函数
header.php 页面 <head> 标签中添加
*/
?>
<?php wp_head(); //用于包含WordPress程序输出头部信息 ?>
<?php
/*
显示菜单栏,这里只在菜单栏中列出分类页和page页面,可以根据喜好来列出想要的。header.php中
*/
?>
<ul id="navigation" >
<?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 >
<!-- Blog Post -->
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div >
<!-- Post Title -->
<h3 ><a href="/blog_article/</php the_permalink(); /gt;.html" rel="bookmark"><?php the_title(); ?></a></h3>
<!-- Post Data -->
<p ><?php the_tags('标签:', ', ', ''); ?> • <?php the_time('Y年n月j日') ?> • <?php comments_popup_link('0 条评论', '1 条评论', '% 条评论', '', '评论已关闭'); ?><?php edit_post_link('编辑', ' • ', ''); ?></p>
<div > </div>
<!-- Post Image -->
<img alt="" src="/blog_article/</php bloginfo(.html'template_url'); ?>/images/610x150.gif" />
<!-- Post Content -->
<?php //the_excerpt(); ?>
<?php the_content('阅读全文...'); ?>
<!-- Read More Button -->
<p ><a href="/blog_article/</php the_permalink(); /gt;.html" >阅读全文</a></p>
</div>
<div > </div>
<?php endwhile; ?>
<!-- Blog Navigation -->
<p ><?php previous_posts_link('<< 查看新文章', 0); ?> <span ><?php next_posts_link('查看旧文章 >>', 0); ?></span></p>
<?php else : ?>
<h3 ><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
echo implode ( ",", HexToRGB ( "#F7F7DA" ) ) . "<br/>";
echo RGBToHex ( "rgb(247,247,218)" )?>
<?php
function HexToRGB($colour) {
if ($colour [0] == '#') {
$colour = substr ( $colour, 1 );
}
if (strlen ( $colour ) == 6) {
list ( $r, $g, $b ) = array (
$colour [0] . $colour [1],
$colour [2] . $colour [3],
$colour [4] . $colour [5]
);
} elseif (strlen ( $colour ) == 3) {
list ( $r, $g, $b ) = array (
$colour [0] . $colour [0],
$colour [1] . $colour [1],
$colour [2] . $colour [2]
);
} else {
return false;
}
$r = hexdec ( $r );
$g = hexdec ( $g );
$b = hexdec ( $b );
return array (
'red' => $r,
'green' => $g,
'blue' => $b
);
}
function RGBToHex($rgb) {
$regexp = "/^rgb\(([0-9]{0,3})\,\s*([0-9]{0,3})\,\s*([0-9]{0,3})\)/";
$re = preg_match ( $regexp, $rgb, $match );
$re = array_shift ( $match );
$hexColor = "#";
$hex = array (
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F'
);
for($i = 0; $i < 3; $i ++) {
$r = null;
$c = $match [$i];
$hexAr = array ();
while ( $c > 16 ) {
$r = $c % 16;
$c = ($c / 16) >> 0;
array_push ( $hexAr, $hex [$r] );
}
array_push ( $hexAr, $hex [$c] );
$ret = array_reverse ( $hexAr );
$item = implode ( '', $ret );
$item = str_pad ( $item, 2, '0', STR_PAD_LEFT );
$hexColor .= $item;
}
return $hexColor;
}
?>
t1.php
<?php
// 方法一根据模版生成静态页面
// replaceTemplateString函数用于替换模板中指定字符串
function replaceTemplateString($templateString) {
// 用来替换的变量
$title = "文章标题";
$body = "这里是文章主体";
// 替换模板中指定字符串
$showString = str_replace ( "%title%", $title, $templateString );
$showString = str_replace ( "%body%", $body, $showString );
// 返回替换后的结果
return $showString;
}
$template_file = "template.html";
$new_file = "new.html";
// 模版文件指针
$template_juBing = fopen ( $template_file, "r" );
// 要生成的文件指针
$newFile_juBing = fopen ( $new_file, "w" );
// 方式一获取整体模板内容字符串,替换后赋给新文件
$templateString = fread ( $template_juBing, filesize ( $template_file ) );
$showString = replaceTemplateString ( $templateString ); // 替换模板中字符串
fwrite ( $newFile_juBing, $showString ); // 将替换后的内容写入生成的HTML文件
/*
// 方式二循环读取模版每行内容字符串,替换后依次添加到新文件
while ( ! feof ( $template_juBing ) ) { // feof() 函数检测是否已到达文件末尾。如果文件指针到了末尾或者出错时则返回 TRUE。否则返回FALSE(包括 socket 超时和其它情况)。
$templateString = fgets ( $template_juBing ); // fgets(file,length) 从文件指针中读取一行并返回长度最多为 length - 1 字节长度的字符串,包括换行符。如果没有指定 length,则默认为 1K,或者说 1024 字节。
$showString = replaceTemplateString ( $templateString );
fwrite ( $newFile_juBing, $showString ); // 第一次往打开的指针文件中写入内容时会替换指针文件中原有内容,在该文件指针关闭前,fwrite函数再添加内容会在已添加内容之后
}
*/
// 关闭文件指针
fclose ( $newFile_juBing );
fclose ( $template_juBing );
/*
数据库与静态页的关系
通常数据库内添加一条信息同后,生成一个该信息的静态页面,所以最好在数据库表中添加一字段存储对应静态页面的路径文件名,方便以后的修改,删除
模版的替换
一般来说,如果需要修改静态HTML页面的模版,通常的做法是将所有的已经生成的HTML页面删除,然后重新创建新的HTML页面。(或者说全部重新覆盖生成)
静态页上的动态操作
有些时候,在创建的静态HTML页上面也需要进行一些动态操作。例如,新闻系统中的每篇新闻要统计点击率。
可通过一个宽和高都为0像素的图像控件来隐藏的调用一个php页面来实现页面计数器功能,如
<img width='0' height='0' src='/blog_article/counter/fileid/S001.html'>
链接目录的静态页
通常对于使用静态页面的系统来说,往往将连接列表的目录页也生成静态HTML文件供访问者浏览
注意的是因为每增加或者减少一条数据库信息都会对链接列表产生影响,因此,每次对数据库信息进行添加和删除时都需要更新链接目录的静态页。
分页的设计可以通过创建多个链接目录的静态页来完成。
*/
// 方法二根据缓冲区生成
ob_start (); // 当缓冲区激活时,并且有ob_end_clean()的情况下,所有输出打印的非文件头信息均不会输出打印到页面,而是保存在内部缓冲区。如果没有ob_end_clean(),则信息既被存在内部缓冲区,也被输出打印
?>
this is test Output Control
<?php
echo "<br>this is test Output Control<br>";
include_once 'cache/newFile.php';
$contents = ob_get_contents (); // 获取缓冲区到此为止存储的信息,缓冲区只保存会向页面浏览器输出打印的内容,php执行代码等不会保存
// $contents = ob_get_clean(); // 获取缓冲区到此为止存储的信息,并关闭清除缓冲区
// ob_end_flush();//输出打印缓冲区到此为止存储的信息,并关闭清除缓冲区
ob_end_clean (); // 关闭清除缓冲区的内容
file_put_contents ( $new_file, $contents );// 向文件写入内容
?>
template.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>%title%</title>
</head>
<body>
<H1>%title%</H1>
<hr>
<pre>%body%</pre>
</body>
</html>