#Wordpress模版#

Wordpress 主题:顶部模板(header.php)

本文主要通过分析 WordPress 官方主题 twentytwelve 的中的“顶部模板”来了解 WordPress 主题顶部制作需要用到的函数。

顶部模板的代码将应用于 Wordpress 所有的页面,其他页模板需要通过 get_header() 来调用。

<!DOCTYPE html>
<!--[if IE 7]>
<html class="ie ie7" <?php language_attributes(); ?>>
<![endif]-->
<!--[if IE 8]>
<html class="ie ie8" <?php language_attributes(); ?>>
<![endif]-->
<!--[if !(IE 7) | !(IE 8)  ]><!-->
<html <?php language_attributes(); ?>>
<!--<![endif]-->
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>" />
<meta name="viewport" content="width=device-width" />
<title><?php wp_title( '|', true, 'right' ); ?></title>
<link rel="profile" href="http://gmpg.org/xfn/11" />
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
<?php // Loads HTML5 JavaScript file to add support for HTML5 elements in older IE versions. ?>
<!--[if lt IE 9]>
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script>
<![endif]-->
<?php wp_head(); ?>
</head>
阅读全文

Wordpress 主题:首页模板(index.php)

本文主要通过分析 Wordpress 官方主题 twentytwelve 的中的“首页模板”来了解 Wordpress 主题首页制作需要用到的函数。

首页大概可以分为四个个部分,头部,主体,侧边栏,底部。

<?php get_header(); ?>

get_header():获取头部模板(header.php)文件中的内容,头部模板主要包含的是首页中导航栏的代码,以后再详细分析。
<!--more-->

接下来是首页主体内容的代码,主要获取文章相关的信息。

<div id="primary" class="site-content">
    <div id="content" role="main">
    <?php if ( have_posts() ) : ?>
    <?php while ( have_posts() ) : the_post(); ?>
        <?php get_template_part( 'content', get_post_format() ); ?>
    <?php endwhile; ?>
    <?php twentytwelve_content_nav( 'nav-below' ); ?>

have_posts():判断是否有文章,如果有则返回 true。
the_post():获取当前文章对象。
get_post_format():获取当前文章的类型,比如日志(aside)、图像(image)或链接(link)。
get_template_part():获取指定模板文件的内容,有两个参数,$slug(通用模板名称) 和 $name(自定义名称),得到的模板文件名就是 $slug-$name.php。这里的模板存储的是显示文章的详细代码。
twentytwelve_content_nav():这个是在 function.php 中自定义的一个函数,获取分页导航。

首先判断是否有文章,如果有则循环获取文章对象并显示,如果没有,则执行下面的代码。

<?php else : ?>
    <article id="post-0" class="post no-results not-found">
        <?php if ( current_user_can( 'edit_posts' ) ) : ?>
            <header class="entry-header">
                <h1 class="entry-title"><?php _e( 'No posts to display', 'twentytwelve' ); ?></h1>
            </header>
            <div class="entry-content">
                <p><?php printf( __( 'Ready to publish your first post? <a href="%s">Get started here</a>.', 'twentytwelve' ), admin_url( 'post-new.php' ) ); ?></p>
            </div>

current_user_can():判断当前用户是否有某个权限,比如编辑文章(edit_posts)。

_e():简单理解为获取字符串在当前语言下显示的内容,一般你的主题不做多语言版本的话不会用这个。
__():和上面作用一样,只不过只获取值,不打印出来。
admin_url():获取当前站点 Wordpress 后台的地址,比如“http://sxlf.org/wp-admin/”,带一个参数代表后台的具体页面,这里 post-new.php 是新建文章的页面。

没有文章,如果你登录了且有编辑权限就显示一个新建文章的链接,否则执行下面的代码。

<?php else : ?>
    <header class="entry-header">
       <h1 class="entry-title"><?php _e( 'Nothing Found', 'twentytwelve' ); ?></h1>
    </header>
    <div class="entry-content">
       <p><?php _e( 'Apologies, but no results were found. Perhaps searching will help find a related post.', 'twentytwelve' ); ?></p>
       <?php get_search_form(); ?>
    </div>
 <?php endif; ?>
 </article>
 <?php endif; ?>
 ```

`get_search_form()`:获取搜索表单的内容。如果想主题有搜索功能的话就用它。

主体部分到此结束,最后就是获取侧边栏模板(sidebar.php)和底部模板(footer.php)的内容了。
```php
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Wordpress 自定义导航菜单详解

这里来详细讲一下如何自定义导航菜单,有三个步骤

1.注册

通过在 function.php 调用 register_nav_menu() 或者 register_nav_menus(),完成此步后你的主题就支持自定义导航菜单的功能了。

2.设置

后台-外观-菜单中自定义你的导航菜单。
<!--more-->

3.调用

在模板文件里通过 wp_nav_menu() 调用你的菜单。

要注意的是 wp_nav_menu()$theme_locaton 的值应该是 register_nav_menu()$locaton 的值,而不是你在后台设置所添加的那个菜单名称。,我第一次用的时候就搞错了,后来知道如何注册了多个菜单时就好理解了。

在 Wordoress 官网看有关自定义导航菜单的更多信息:http://codex.wordpress.org/Navigation_Menus

Wordpress 注册导航菜单:register_nav_menu()

register_nav_menu() 用于 WordPress 中注册导航菜单。

调用

//在 function.php中 调用
<?php register_nav_menu( $location, $description ); ?>

参数

<?php register_nav_menu( 
      $location,//菜单的名称
      $description //菜单的描述
      );
?>

同时注册多个导航菜单要用到 register_nav_menus() 函数

<?php
register_nav_menus( array(
    'menu1' => '菜单一',
    'menu2' => '菜单二'
) );
?>

另外,注销导航菜单要用到 unregister_nav_menu( $location ) 函数,可以用在子主题的 function.php 中。

Wordpress 自定义后台

添加菜单

add_menu_page():添加一个顶级菜单

<?php   
add_menu_page( $page_title, //菜单页标题
               $menu_title, //菜单标题
               $capability, //访问权限
               $menu_slug,  //菜单别名
               $function,   //执行函数
               $icon_url,   //菜单图标
               $position    //菜单位置
             );
?>

add_submenu_page():添加一个子菜单

<?php   
add_submenu_page( $parent_slug, //父菜单别名
                  $page_title,  //菜单页标题
                  $menu_title,  //菜单标题
                  $capability,  //访问权限
                  $menu_slug,   //菜单别名
                  $function    //执行函数
                );
?>
阅读全文

Wordpress 获取分类数据

获取分类数据

根据文章ID获取文章分类数据:get_the_category()

根据分类别名获取分类数据:get_category_by_slug()

<?php $cat = get_the_category($post_id);//返回数组,参数默认为当前文章ID ?>
<?php $cat = get_category_by_slug($slug);//返回数组?>

根据分类ID或分类对象获取分类数据:get_category()

<?php $cat = get_category( $category,$output,$filter);?>
<?php
$cat = get_category_by_slug($slug);//返回数组?>
<?php
$cat_id = $cat->term_id;//获取分类ID
$cat_count = $cat->count;//获取分类文章数
$cat_description = $cat->description;//获取分类描述
$cat_slug = $cat->slug;//获取分类别名
$cat_parent = $cat->parent;//获取分类父级引用
 ?>
 ```
<!--more-->
**获取有文章的分类列表:`get_the_category_list()`**

```php
<?php echo get_the_category_list();//返回字符串,为ul列表 ?>

输出结果

<ul class="post-categories">
    <li>
        <a href="http://seorss.net/category/wordpress" title="View all posts in Business" rel="category tag">wordpress</a>
    </li>
</ul>
<?php get_the_category_list($separator,$parents,$post_id);
//$separator:分类之间的分割符
//$post_id:根据文章ID获取分类列表
?>

根据分类ID获取分类名称:get_cat_name()

<?php $cat_name = get_cat_name( $cat_id );?>

根据分类ID获取分类链接(URL):get_category_link()

<?php $cat_url = get_category_link($category_id);//返回URL字符串 ?>

根据分类名称获取分类ID:get_cat_ID()

<?php $cat_id = get_cat_ID($cat_name);//返回分类ID ?>

Wordpress 获取多篇文章:get_posts()

get_posts() 用于在 WordPress 中提取多篇文章。

调用

<?php $posts = get_posts($args); ?>

参数

<?php
$args = array(
'numberposts' => 5,
'offset' => 0,
'category' => ,
'orderby' => 'post_date',
'order' => 'DESC',
'include' => ,
'exclude' => ,
'meta_key' => ,
'meta_value' => ,
'post_type' => 'post',
'post_mime_type' => ,
'post_parent' => ,
'post_status' => 'publish' );
?>
阅读全文

Wordpress 导航菜单:wp_nav_menu()

调用

在需要调用导航菜单的地方插入<?php wp_nav_menu($args);>

wp_nav_menu($args)函数中,参数$args的默认值

<?php $defaults = array(
'theme_location' => ,
'menu' => ,
'container' => 'div',
'container_class' => 'menu-{menu slug}-container',
'container_id' => ,
'menu_class' => 'menu',
'menu_id' => ,
'echo' => true,
'fallback_cb' => 'wp_page_menu',
'before' => ,
'after' => ,
'link_before' => ,
'link_after' => ,
'items_wrap' => '<ul id=”%1$s” class=”%2$s”>%3$s</ul>',
'depth' => 0,
'walker' => );
?>
阅读全文