wordpress常用函数

src=http___nzzrdt.com_wp-content_uploads_2017_05_IMG_1423.png&refer=http___nzzrdt.jpg

wpautop()函数

<?php
$some_long_text = '为WordPress输出的内容自动添加p标签';
echo wpautop( $some_long_text );
?>

get_queried_object_id()函数

首先我定义了一个 products 的自定义类型,并且为这个自定义类型创建了一个 product 的自定义分类,想要获取 product 自定义分类中每个分类目录的 ID 只需要按照以下形式写即可

$term_id = get_queried_object_id( 'product' )

is_singular()函数

is_single()、判断是否是单页面的函数 is_page(),如果是判断当前页面是文章或单页面时就要结合两个函数一起使用。而 is_singular()函数则是这两个函数的升级版,通过这一个函数即可以实现前面所述的判断,并且支持附件、自定义文章类型的判断。

判断当前页面是否是文章内容页

<?php
if(is_singular('post')){
    echo '这是文章post页面';
}
?>

判断当前页面是否是文章内容页或单页面

<?php
if(is_singular(array('post','page')){
    echo '这是文章内容页或单页面';
}
?>

get_the_tags()函数

get_the_tags()函数用于获取标签信息,包括标签 ID、别名、名称、描述等。get_the_tags()函数需要用在 The Loop 主循环中,如果在主循环之外使用,需要传递文章 ID。

语法 get_the_tags( int $id = 0 )

参数

$id 整数型,默认值:当前文章 ID,指定文章 ID,将返回该文章的标签信息。

<?php
    $posttags = get_the_tags();
    if ($posttags) {
      foreach($posttags as $tag) {
        echo '标签ID:' . $tag->term_id;
        echo '<br />标签名称:' . $tag->name;
        echo '<br />标签描述:' . $tag->description;
      }
    }
?>

switch_theme()函数

switch_theme()函数主要是用来切换 WordPress 主题,也就是在后台外观-主题里面更换主题时有可能会使用到。

switch_theme(WP_DEFAULT_THEME); //切换回默认的主题

esc_url()函数

esc_url()函数主要用于 URL 过滤:

拒绝不是下面协议的 URL (defaulting to http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed, and telnet)
消除无效字符和删除危险字符。
将字符转换成 HTML 实体,并且将 & 和 单引号(’) 转换成数字实体:&#038, &#039。

get_cat_name()函数

get_cat_name()函数的主要功能是通过 id 值来获得分类的名称。

语法 <? php get_cat_name( int $cat_id ); ?>

参数 (int) (Required) 分类 ID

<? php echo get_cat_name(1); ?>
输出ID为1的分类的名称

wp_list_bookmarks()函数

调用友情链接

语法 <? php wp_list_bookmarks( $args ); ?>

参数

<?php $args = array(
'orderby' => 'name',
'order' => 'ASC',
'limit' => -1,
'category' => ,
'exclude_category' => ,
'category_name' => ,
'hide_invisible' => 1,
'show_updated' => 0,
'echo' => 1,
'categorize' => 1,
'title_li' => __('Bookmarks'),
'title_before' => '<h2>',
'title_after' => '</h2>',
'category_orderby' => 'name',
'category_order' => 'ASC',
'class' => 'linkcat',
'category_before' => '<li id=/"%id/" class=/"%class/">',
'category_after' => '</li>' ); ?>

显示所有链接,标题为“Bookmarks”,各链接项包围在<li>标签中,标题则用<h2>标签。

<?php wp_list_bookmarks('title_li=&category_before=&category_after='); ?>

按上一个例子的条件显示所有链接,但不包括默认标题。

<?php wp_list_bookmarks('title_li=&categorize=0'); ?>

显示 ID 为 2 的链接分类下的所有链接,使用链接图片,不显示链接说明,按 URL 排列链接。

<?php wp_list_bookmarks('categorize=0&category=2&before=<span>&after=</span>&show_images=1&show_description=0&orderby=url'); ?>

以数字编号列表形式显示所有链接,各链接下另起一行填写链接说明,不适用链接图片,按 ID 排列链接,显示链接等级和最新更新的时间。

<ol>
<?php wp_list_bookmarks('between=<br />&show_images=0&orderby=id&show_rating=1&show_updated=1'); ?>
</ol>

从主题目录中选择一个图片代替普通文本作为链接列表标题。

<?php wp_list_bookmarks('categorize=0&title_before=&title_after=&title_li=<img src="'.get_bloginfo("stylesheet_directory").'/images/blogroll.gif" alt="blogroll" />'); ?>

get_post_custom_values()函数

get_post_custom_values()函数是获取当前日志中所有自定义字段值,如果该值不存在或为空都将返回 null,也称作自定义域函数。类似于 get_post_meta()一样,用于返回文章的自定义字段值得一个函数。

语法 <?php get_post_custom_values( string $key = '', int $post_id ) ?>

参数

$key (字符串) 自定义字段的值 $post_id (数字) (Optional) 默认全局变量$post id 值

单个自定义字段值输出方法
$mykey_value = get_post_custom_values("my_key");
    $post_thumbnail_src = $values [0];
echo $post_thumbnail_src
多个自定义字段值输出方法
<?php $mykey_values = get_post_custom_values( 'my_key' );
foreach ( $mykey_values as $key => $value ) {
    echo "$key => $value ( 'my_key' )<br />";
}

输出值
0 => First value ( 'my_key' )
1 => Second value ( 'my_key' )
2 => Third value ( 'my_key' ) ?>

通过使用 WP 自定义字段功能,可以给文章增加些额外的内容,如用 WP 做淘客模板时给产品添加商品价格显示,添加购买链接等,还可以实现文章缩略图。

自定义字段调用:

<?php echo get_post_meta($post_id, $key, $single); ?>

这种方法可以输出自定义字段的值,当然也可以使用自定义域函数,调用方法:

if( $values = get_post_custom_values("thumbnail") ) {
    $values = get_post_custom_values("thumbnail");
    $post_thumbnail_src = $values [0];
}

wp_get_theme()函数

wp_get_theme()函数主要作用是用来获得 WordPress 主题的相关信息。

<?php
$theme = wp_get_theme();
echo $theme->get( 'Name' ); //主题名
echo $theme->get( ThemeURI' ); //主题 URL
echo $theme->get( Description' ); //主题描述
echo $theme->get( Author' ); //作者名
?>

wp_get_theme()函数详细参数:

  • Name:主题名
  • ThemeURI:主题 URL
  • Description:主题描述
  • Author:作者名
  • AuthorURI:作者 URL
  • Version:主题版本号
  • Template:父主题的文件夹名称,子主题中使用
  • Status:主题状态,如果发布的话
  • Tags:标签
  • TextDomain:主题中用于翻译目的的文本域
  • DomainPath:主题翻译文件路径

wp_get_theme()函数还可以指定主题名来获取指定主题的其它信息,如下:

<?php
$theme = wp_get_theme( 'Viti' );
if ( $theme->exists() )
echo $theme;
?>

get_theme_file_path()函数

get_theme_file_path()函数可以用来引入主题中某个文件,也就是说你想找到主题中某个文件,可以用此函数来查找。

require_once get_theme_file_path() .'/inc/functions.php';
//这段代码将加载主题文件夹下的inc文件夹下的functions.php文件

get_post_thumbnail_id()函数

get_post_thumbnail_id()函数主要是用来获取文章缩略图 ID,通过该函数,如果当前文章设置了特色图像,就可以返回该特色图像的 ID,如果没有设置则返回 null 值。

语法 <?php get_post_thumbnail_id( $post_id ); ?>

参数 $post_id – 文章ID,默认为空

get_post_format()函数

get_post_format()函数用于获取文章的形式,在为不同形式的文章制作不同的模板时非常有用。

语法 get_post_format( int $post = null )

参数 $post_id 整数型,默认值:null 文章的ID

返回值

  • aside 日志
  • chat 聊天
  • gallery 相册
  • link 链接
  • image 图像
  • quote 引语
  • status 状态
  • video 视频
  • audio 音频
get_template_part('content', get_post_format());

get_template_part():根据get_post_format()返回的信息来加载content开头命名的相应的模板;

get_post_format():获取当前post的形式。

比如我们现在有一个模板 content-image.php

那么可以通过 get_template_part(‘content’, get_post_format())调用,即如果当前 post 形式是 image,也就是对应上面的返回值,那么就会调用模板 content-image.php;如果返回的 post 分类模板不存在,那么就会使用默认 post 模板。

site_url()函数

<?php site_url( $path, $scheme ); ?> <?php echo site_url(); ?>

$ url = site_url();
echo $ url;

输出:http://www.example.com或http://www.example.com/wordpress (注意缺少尾部斜杠)

$ url = site_url('/secrets/','https');
echo $ url;

输出:https://www.example.com/secrets/或https://www.example.com/wordpress/secrets/

site_url() 指向 WordPress 核心文件的 URL,也就是你的 wordpress 安装路径。 如果你的 WordPress 核心文件在你的服务器的子目录中,比如 /wordpress,那么 site_url() 的值就会是 http://www.phpvar.com/wordpress 。

在控制面板==>> 设置 ==>> WordPress 地址(URL)中可进行修改。

返回的是数据库中 wp_options 表里面的 siteurl 字段值。

(在非不得已的情况下不要修改,一般在安装成功后这个值是自动生成。修改错误的地址会导致页面打不开,后台管理也进不去,出现这种情况只能通过修改数据库来修复。)

home_url()就是首页地址,主要用在需要返回首页的时候。比如 logo 的链接,“面包屑”的“首页”链接等等。

site_url() 返回 wordpress 安装路径,主要用在文件路径的获取,如获得 test.jpg 图片文件绝对路径拼接:site_url().”/images/test.jpg”。

home_url()函数

默认用法

<?php echo esc_url( home_url( '/' ) ); ?>

$url = home_url();
echo esc_url($ url);

输出:http://www.bian2013.com (注意缺少尾部斜杠)
$url = home_url('/');
echo esc_url($url);

输出:http://www.bian2013.com/
$url = home_url('/','https');
echo esc_url($url);

输出:https://www.bian2013.com/
$url = home_url('example','relative');
echo esc_url($url);

输出:/example

home_url()就是首页地址,主要用在需要返回首页的时候。比如 logo 的链接,“面包屑”的“首页”链接等等。

site_url() 返回 wordpress 安装路径,主要用在文件路径的获取,如获得 test.jpg 图片文件绝对路径拼接:site_url().”/images/test.jpg”。

register_setting()函数

<?php
register_setting(
    string $option_group,
    string $option_name,
    array $args = array()
);
?>
<?php
//后台设置->常规添加新的字段
function xk_general_section() {
    add_settings_section(
        'xk_settings_section', // ID
        '联系方式', // 显示在页面的标题
        'xk_settings_section_callback', // 页面回掉
        'general' // 'general', 'reading', 'writing', 'discussion', 'media'
    );

    add_settings_field(
        'address', // ID
        '地址', // 显示在页面的标题即label
        'xk_textbox_callback', // 回掉
        'general', // 'general', 'reading', 'writing', 'discussion', 'media'
        'xk_settings_section', // section ID
        array( // The $args
            'address' // Should match Option ID
        )
    );

    add_settings_field(
        'phone',
        '电话',
        'xk_textbox_callback',
        'general',
        'xk_settings_section',
        array(
            'phone'
        )
    );

    add_settings_field(
        'email',
        '邮箱',
        'xk_textbox_callback',
        'general',
        'xk_settings_section',
        array(
            'email'
        )
    );

    add_settings_field(
        'fax',
        '传真',
        'xk_textbox_callback',
        'general',
        'xk_settings_section',
        array(
            'fax'
        )
    );

    register_setting('general','address', 'esc_attr');
    register_setting('general','phone', 'esc_attr');
    register_setting('general','email', 'esc_attr');
    register_setting('general','fax', 'esc_attr');
}

function xk_settings_section_callback() {
}

function xk_textbox_callback($args) {
    $option = get_option($args[0]);
    echo '<input type="text" id="'. $args[0] .'" name="'. $args[0] .'" value="' . $option . '" />';

}
add_action( 'admin_init', 'xk_general_section' );

add_settings_field( )函数

add_settings_field( )函数的作用主要是为 WordPress 后台-Settings 添加一些新的自定义变量

<?php
add_settings_field(
    string $id,
    string $title,
    callable $callback,
    string $page,
    string $section = 'default',
    array $args = array()
) ;
?>
<?php
add_settings_field(
    'address', // ID
    '地址', // 显示在页面的标题即label
    'xk_textbox_callback', // 回掉
    'general', // 'general', 'reading', 'writing', 'discussion', 'media'
    'xk_settings_section', // section ID
    array( // The $args
        'address' // Should match Option ID
    )
);
?>

wp_deregister_script()函数

wp_deregister_script()函数主要是用来去除 WordPress 本身自带的一些 js 文件,一把情况下,我们制作的 WordPress 主题的前端会加载一些比如 jquery 文件,这些文件可能与我们的前端源码有冲突导致网页显示不正常,这时候可以使用这个函数来去除冲突的 WordPress 自带 JS 文件。

语法 wp_deregister_script( string $handle ) 参数 $handle (字符串) (必须) 此处为要移除的脚本handle名称。默认: None

if ( !is_admin() ) {
    function my_init_method() {
        wp_deregister_script( 'jquery' );
    }
    add_action('init', 'my_init_method');
}

get_comment_meta()函数

get_comment_meta()函数主要是用来把新增加的评论的字段的值在后台展示出来。

语法 <?php get_comment_meta( $comment_id, $key, $single ); ?>

参数

  • $comment_id – 评论的 id
  • $key – 字段名。
  • $single – 布尔型,true 或 false,设置为 true 返回一个字符串,设置为 false,返回一个数组。

update_comment_meta()函数

update_comment_meta()更新一个评论的 meta 自定义附加信息,主要是给 wp_commentmeta 表增加新的字段。

语法 <?php update_comment_meta( $comment_id, $meta_key, $meta_value, $prev_value ); ?>

参数

  • $comment_id (integer) (必填) 您要编辑的字段的注释的 ID。 默认值: None

  • $meta_key(string) (必填) 您要编辑的字段的键。 默认值: None

  • $meta_value(mixed) (必填) 您要编辑的字段的新值。 默认值: None

  • $prev_value(mixed) (可选) 字段的旧值。默认值: None

function update_comment_meta( $comment_id, $meta_key, $meta_value, $prev_value = '' ) {
    return update_metadata( 'comment', $comment_id, $meta_key, $meta_value, $prev_value );
}

get_comments_number()函数

某些时候我们需要在网站上面展示出文章的评论数量,这时候就需要使用 get_comments_number()函数,这个函数能够完美的实现这个需求。

语法 get_comments_number( int|WP_Post $post_id )

<?php echo get_comments_number(); ?>

post_password_required()函数

post_password_required()函数用来判断文章是否需要输入密码或者输入的密码是否正确

/*判断查阅文章是否需要输入密码,在没输入密码之前或者密码输入不正确,则不加载这段代码下面的代码*/
if ( post_password_required() ) {
    return false;
}

wp_get_current_commenter()函数

wp_get_current_commenter()函数可以获取当前的评论者姓名、邮箱和 URL 的值,可以用在 fields 表单内的 value 字段显示

语法 <?php wp_get_current_commenter() ?>

参数

返回一个数组
Array (
    ['comment_author'] => 'name',
    ['comment_author_email'] => 'email',
    ['comment_author_url'] => 'url'
)

comments_template ()函数用来加载评论模板。只能用于单篇文章或页面来显示评论,如果不是这些页面,将没办法显示。

<?php comments_template( $file, $separate_comments ); ?>

$file (字符串 string) (可选) 要加载的文件 默认: comments.php

$separate_comments (布尔值 boolean) (可选) 是否根据评论的类型划分评论 默认: false

is_post_type_archive()函数

is_post_type_archive()函数用来判断归属于某个类型的文章归档页。

语法 <?php is_post_type_archive( $post_types ); ?>

参数

$post_types 指的是文章类型或者自定义文章类型

<?php
if ( is_post_type_archive() ) {
    ?>
    <h1><?php post_type_archive_title(); ?></h1>
    <?php
}
?>

is_archive()函数

is_archive()函数函数主要是检查任何类型的存档页面,是一个布尔类型函数,返回 true 或 false,一般我常用来验证自定义类型,增加其 SEO 功能。

语法 <?php is_archive(); ?>

<?php
if ( is_archive() ) {
    // 代码
}
?>

不过 is_archive()不支持任何参数,如果需要针对某个类型进行判断,则此函数就行不通了,需要使用下面这个函数 is_post_type_archive( $post_type )

自定义类型的分类是无法用 <?php echo get_category_link( $category_id ); ?> 输出分类链接地址的,需要用 get_term_link() 函数

语法结构 get_term_link( object|int|string $term, string $taxonomy )

参数

$taxonomy 自定义分类的名称

<?php
//根据别名redian获取其对应的分类id
$term=get_term_by('slug','theme','products');
$term_id=$term->term_id;
//根据id获取分类对应链接
$link=get_term_link($term_id,'products');
echo $link;
?>

get_term_by()函数

get_term_by()函数主要用来快速查找某一个分类的名称、别名和 id 的值,只要提供别名、名称或编号其中一个,就可以获取它其余的信息,省时省力又精确。

语法结构 <?php get_term_by( $field, $value, $taxonomy, $output, $filter ) ?>

参数

前3个参数为必须值
$field——id、slug、name
$value—-$field的值
$taxonomy—-自定义分类方式的名称

比如我自建了一个 products 的分类

根据分类名称获取分类名称值为Theme的别名
<?php
$item = get_term_by('name','Theme','products');
echo $item->slug;
?>

根据id获取id值为21的分类的别名
<?php
$item = get_term_by('id','21','products');
echo $item->slug;
?>

根据别名获取别名值为theme的分类名称
<?php
$item = get_term_by('slug','theme','products');
echo $item->name;
?>

根据id获取id值为21的分类的分类名称
<?php
$item = get_term_by('id','21','products');
echo $item->name;
?>

根据别名获取别名值为theme的分类的id
<?php
$item = get_term_by('slug','theme','products');
echo $item->term_id;
?>

根据分类名称获取分类名称值为Theme的分类的id
<?php
$item = get_term_by('name','Theme','products');
echo $item->term_id;
?>

get_search_form()函数

get_search_form 函数在 WordPress 中是用来提取预设的搜索表单或者默认的搜索表单的。

语法结构 <?php get_search_form($echo = true) ?>

参数

$echo 布尔型,参数是可选的,如果是 true 则显示表单,如果是 false 则会返回一个字符串,默认是 true。

如果主题目录里没有 searchform.php 这个文件,那么 WordPress 将默认使用内置的搜索表单,其格式为

<form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
    <div>
        <label class="screen-reader-text" for="s">Search for:</label>
        <input type="text" value="" name="s" id="s" />
        <input type="submit" id="searchsubmit" value="Search" />
    </div>
</form>

如果主题文件里有 searchform.php 这个文件,那么 WordPress 就会使用指定的搜索表单模版。注意,搜索表单应该使用 get 方法指向主页,文本域的 name 应该是 s,这是一个自定义 searchform.php 的例子:

<form action="/" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
    <label for="search">Search</label>
    <input type="text" name="s" id="search" value="<?php the_search_query(); ?>" />
    <input type="image" alt="Search" src="<?php bloginfo( 'template_url' ); ?>/images/search.png" />
</form>

如果不想用这种方法自定义搜索表单,还可以使用 get_search_form 钩子进行搜索表单的添加

function change_search_form( $form ) {
    $form = '<form role="search" method="get" class="search-form" action="' . esc_url( home_url( '/' ) ) . '">
        <label>
            <span class="screen-reader-text">' . _x( 'Search for:', 'label' ) . '</span>
            <input type="search" class="search-field" placeholder="' . esc_attr_x( 'Search for:', 'placeholder' ) . '" value="' . get_search_query()
    . '" name="s" title="' . esc_attr_x( 'Search for:', 'label' ) . '" />
        </label>
        <input type="submit" class="search-submit" value="' . esc_attr_x( 'Search', 'submit button' ) .'" /></form>';
    return $form;
}
add_filter( 'get_search_form', 'change_search_form' );

这三种表单的级别从大到小依次是钩子方法>searchform.php>默认搜索表单

register_taxonomy()函数

register_taxonomy()函数为自定义的 Post type 添加自定义分类功能。

语法结构 <?php register_taxonomy($taxonomy, $post_type, $args); ?> //为自定义的Post type添加自定义分类功能

参数

  • $taxonomy 添加的类的名称
  • $post_type 注册的自定义类型

$labels 的详细参数

  • ‘name’ – 分类的通用名称,通常为复数
  • ‘singular_name’ – 此分类法的一个对象的名称
  • ‘search_items’ – 搜索项目文字。默认为(’搜索标签’)或(’搜索类别’)
  • ‘popular_items’ – 热门项目文字。默认为__(’热门标签’)或 null
  • ‘all_items’ – 所有项目文本。默认为(’所有标签’)或(’所有类别’)
  • ‘parent_item’ – 父项文本。此字符串不用于非分层分类法,例如帖子标记。默认值为 null 或__(’父类别’)
  • ‘parent_item_colon’ – 与结果相同 parent_item,但:结尾为冒号,__(’父类别:’)
  • ‘edit_item’ – 编辑项目文本。默认为(’编辑标签’)或(’编辑类别’)
  • ‘update_item’ – 更新项目文本。默认为(’更新标签’)或(’更新类别’)
  • ‘add_new_item’ – 添加新项目文本。默认为(’添加新标签’)或(’添加新类别’)
  • ‘new_item_name’ – 新项目名称文本。默认为(’新标签名称’)或(’新类别名称’)
  • ‘separate_items_with_commas’ – 分类项元框中使用逗号文本的单独项目。此字符串不用于分层分类法。默认值为__(’带逗号的单- 独标签’)或 null
  • ‘add_or_remove_items’ – 添加或删除项目文本,并在禁用 JavaScript 时在元框中使用。此字符串不用于分层分类法。默认值为__(’添加或删除标记’)或 null
  • ‘choose_from_most_used’ – 从分类法元框中使用的最常用文本中进行选择。此字符串不用于分层分类法。默认值为__(’从最常用的标签中选择’)或 null
  • ‘menu_name’ – 菜单名称文字。此字符串是提供菜单项的名称。默认为 name 的值

$args 的详细参数

public- 否应在管理 UI 中公开此分类

  • show_ui – 是否生成用于管理此分类的默认 UI。默认值:如果未设置,则默认为 public 参数的值
  • show_in_nav_menus – true 使此分类在导航菜单中可供选择,默认值:如果未设置,则默认为 public 参数的值
  • show_tagcloud – 是否允许 Tag Cloud 小部件使用此分类,默认值:如果未设置,则默认为 show_ui 参数的值
<?php
$labels = array(
        'name' => '产品分类',
        'singular_name' => '产品分类',
        'search_items' =>  '搜索产品' ,
        'all_items' => '所有产品' ,
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => '编辑产品' ,
        'update_item' => '更新产品' ,
        'add_new_item' => '添加产品' ,
        'new_item_name' => '新产品',
        'separate_items_with_commas' => '' ,
        'add_or_remove_items' => '添加或删除',
        'choose_from_most_used' => '从经常使用的类型中选择',
        'menu_name' => '产品分类',
    );

    register_taxonomy(
        'products', array('product'),
        array(
            'labels' => $labels,
            'hierarchical' => true,
            'show_ui' => true,
            'query_var' => true,
        )
    );
?>

前台调用

自定义分类法的分类列表页面模板文件是 taxonomy.php 或 taxonomy-{taxonomy_slug}.php,taxonomy.php 是所有自定义分类法默认调用的模板文件,taxonomy-{taxonomy_slug}.php 则是指定自定义分类法调用的模板文件,比如本教程中创建的自定义分类法 products,使用 taxonomy-products.php 文件即可指定调用。

TIPS

强调一点,添加过新的自定义分类之后一定要更新下固定连接,只需要点击保存设置就行,不然前台是调用不出来的。

register_post_type()函数

register_post_type()函数是用于自定义文章类型的函数

语法结构 register_post_type($post_type,$args)

参数

  • $post_type (string) (必选) 文章类型的名称(最多 20 个字符) Default: 空
  • $args (array) (可选) 一个数组参数 Default: 空

Post Type 可以自定义的功能非常多,所以这个函数里面的 $args 参数会很多。所以通常会用下面这种格式来注册,也有很多是可选项:

// 注册自定义文章形式
function custom_post_type(){
    $labels = array(
        'name' => 'Post Type General Name',
        'singular_name' => 'Post Type Singular Name',
        'menu_name' => 'Post Types',
        'name_admin_bar'  => 'Post Type',
        'archives'  => 'Item Archives',
        'attributes' => 'Item Attributes',
        'parent_item_colon' => 'Parent Item:',
        'all_items' => 'All Items',
        'add_new_item' => 'Add New Item',
        'add_new' => 'Add New',
        'new_item' => 'New Item',
        'edit_item' => 'Edit Item',
        'update_item' => 'Update Item',
        'view_item' => 'View Item',
        'view_items' => 'View Items',
        'search_items' => 'Search Item',
        'not_found' => 'Not found',
        'not_found_in_trash' => 'Not found in Trash',
        'featured_image' => 'Featured Image',
        'set_featured_image' => 'Set featured image',
        'remove_featured_image' => 'Remove featured image',
        'use_featured_image' => 'Use as featured image',
        'insert_into_item' => 'Insert into item',
        'uploaded_to_this_item' => 'Uploaded to this item',
        'items_list' => 'Items list',
        'items_list_navigation' => 'Items list navigation',
        'filter_items_list' => 'Filter items list'
    );
    $args = array(
        'labels' => $labels,
        'description' => 'Post Type Description',
        'supports'  => array('title','editor','author','thumbnail','excerpt','comments'),
        'taxonomies' => array( 'category', 'post_tag' ),
        'hierarchical' => false,
        'public' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'menu_position' => 5,
        'menu_icon' => 'dashicons-cart',
        '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('post_type', $args);
}
add_action('init', 'custom_post_type');

$labels 用来配置文章类型显示在后台的一些描述性文字,默认为空。(上面代码中,为了清晰所以单独拿出来创建了一个数组 $labels)

  • name – 文章类型的名称(英语写为复数)
  • singular_name – 单篇文章类型的名称(英语写为复数)
  • add_new – 对应“添加新的文本”
  • all_items – 子菜单的字符串。默认是所有帖子/所有页面。
  • add_new_item – “添加新帖/新页面”
  • edit_item – “编辑帖子/页面”
  • new_item – “新贴/新页”
  • view_item – 用于查看帖子类型归档的标签。默认是’查看帖子’/’查看页面’
  • search_items – 默认是搜索帖子/搜索页面
  • not_found – 默认是没有发现帖子/找不到页面。
  • not_found_in_trash – 默认是在垃圾桶中找不到帖子/在垃圾桶中找不到页面。
  • parent_item_colon – 此字符串不用于非分层类型。在层次结构中,默认为“父页面:”。
  • menu_name’ – 菜单名称,默认与name相同。

$args 的详细参数

description – 一些简短的介绍文字
public- 用于定义publicly_queryable,exclude_from_search,show_ui,show_in_nav_menus可见的方式, 默认是false,’true 的话即为show_ui = true,public_queryable = true,exclude_from_search = false,show_in_nav_menus = true

publicly_queryable – 可以从前台获取的变量(从url中,比如url重写),默认值:public参数的值
exclude_from_search – 是否能够被搜索到。默认值:与public参数相反的值
show_ui – 是否生成一个默认的管理页面,也就是是否在后台有管理页面。默认值:public参数的值
show_in_nav_menus -是否可以在导航菜单中选择post_type。默认值:public参数的值
show_in_menu- 是否在后台菜单项中显示,如果为ture,那么show_ui的值也必须设置为true,将会有一个顶级菜单项。 默认值:null
menu_position – 在后台菜单中的位置

5 – below Posts
10 – below Media
15 – below Links
20 – below Pages
25 – below comments
60 – below first separator
65 – below Plugins
70 – below Users
75 – below Tools
80 – below Settings
100 – below second separator
menu_icon-用于此菜单的图标的URL或iconfont中图标的名称  默认值:null – 默认为帖子图标
capability_type – 查看、编辑、删除的能力类型(capability),默认为post
capabilities – 这个帖子类型的功能的数组 (一般人用不到)。默认值:capability_type用于构造
map_meta_cap – 是否使用内部默认元功能处理,只有设置了capabilities才用的上。默认值:false
hierarchical – 文章是否有层级关系,也就是是否允许有父级文章。
supports – 对文章类型的一些功能支持

‘title’ 标题
‘editor’ (content) 编辑
‘author’ 作者
‘thumbnail’ 特色图
‘excerpt’ 摘抄
‘trackbacks’ 引用通过
‘custom-fields’ 自定义字段
‘comments’ 评论
‘revisions’ 修订版
‘page-attributes’ 页面属性,类似page,选择页面模板的那个
register_meta_box_cb – 提供在设置编辑表单的元框时调用的回调函数。回调函数使用一个参数$ post,其中包含当前编辑的帖子的WP_Post对象。在回调中执行remove_meta_box()和add_meta_box()调用。默认值:无
taxonomies – 添加已经注册了的分类法
has_archive- 文章是否有归档,就是一个所有文章归档页面
rewrite – 触发此帖子类型的重写操作。为了防止重写,设置为false。默认值:true,并使用$ post_type作为slug

$ args数组

‘slug’=> string自定义永久链接结构块。默认为$ post_type值。应该是可翻译的
‘with_front’=> bool应该使用前置基座添加永久链接结构。(例如:如果你的永久链接结构是/ blog /,那么你的链接将是:false – > / news /,true – > / blog / news /)。默认为true
‘feed’=> bool应该为此帖子类型构建一个feed permalink结构。默认为has_archive值。
‘pages’=> bool应该是永久链接结构提供分页。默认为true
query_var – 设置此帖子类型的query_var键。 默认值:true – 设置为$ post_type false则表示禁用
can_export – 可以导出此post_type。默认值:true
<?php
add_action('init', 'my_custom_product');
function my_custom_product()
{
    $labels = array(
        'name' => 'Products Name',
        'singular_name' => 'Product Singular Name',
        'add_new' => '添加产品',
        'add_new_item' => '添加产品',
        'edit_item' => '编辑产品',
        'new_item' => '新产品',
        'all_items' => __('所有产品'),
        'view_item' => '查看产品',
        'search_items' => '搜索产品',
        'not_found' =>  '没有找到有关产品',
        'not_found_in_trash' => '回收站里面没有相关产品',
        'parent_item_colon' => '',
        'menu_name' => '产品'

    );
    $args = array(
        'labels' => $labels,
        'description'=> '自定义的产品类型',
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'has_archive' => true,
        'hierarchical' => false,
        'menu_position' => 5,
        'menu_icon' => 'dashicons-cart',
        'taxonomies'=> array('post_tag'),
        'supports' => array('title','editor','author','thumbnail','excerpt','comments')
    );
    register_post_type('product',$args);

    $labels = array(
        'name' => '产品分类',
        'singular_name' => '产品分类',
        'search_items' =>  '搜索产品' ,
        'all_items' => '所有产品' ,
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => '编辑产品' ,
        'update_item' => '更新产品' ,
        'add_new_item' => '添加产品' ,
        'new_item_name' => '新产品',
        'separate_items_with_commas' => '按逗号分开' ,
        'add_or_remove_items' => '添加或删除',
        'choose_from_most_used' => '从经常使用的类型中选择',
        'menu_name' => '分类目录',
    );

    register_taxonomy(
        'products',
        array('product'),
        array(
            'hierarchical' => true,
            'labels' => $labels,
            'show_ui' => true,
            'query_var' => true,
        )
    );
}
?>

register_post_type()函数

这里为了直观方便,我直接使用了中文,更好的应该是使用英文然后通过本地化函数来翻译成中文。通过以上代码我们就可以创建一个名为产品的分类

这种方法前端调用的话只需要创建:archive-product.php 模板即可,这个模板用于分类列表页的模板调用,product 是我们的 post type 的名字。创建 single-product.php 模板即可实现分类的文章的详情页的调用。

‘taxonomies’=> array(‘post_tag’)这段代码意思是给自定义 post type 添加标签页面,如果需要使用 WordPress 自带的分类标签方法,可以写为注意,’taxonomies’=> array(‘post_tag’, ‘category’)。

在 wordpress 中也有一种独立的分类法,与文章类型一样,可以使用 register_taxonomy()函数来注册分类方法

comment_form()函数

在 WordPress 主题中, 使用 comment_form()函数来生成一个评论表单。通常把评论模块的代码写进单独的 comments.php 文件中,然后使用 comments_template ()函数在 single.php、page.php 等文件底部引用评论模块。

语法结构 <?php comment_form( $args, $post_id ); ?>

参数

$args (array) (optional) 包括$fields、标题和发送等的信息

$fields

$fields(array) (optional) 控制表单信息,包括
姓名 – author
邮箱 – email
网址 – url
留言内容 – comment_field
comment_notes_before – 在评论表单前面显示提示信息
comment_notes_after – 在评论表单后面显示提示信息
$args

title_reply – 改变评论表单标题,默认是:Leave a Reply。
title_reply_to
comment_notes_before – 在评论表单前面显示提示信息
comment_notes_after – 在评论表单后面显示提示信息
title_reply_before 给评论表单标题加上HTML结构或text,比如加个<h3>开头
title_reply_after 给评论表单标题加上HTML结构或text,比如加个</h3>结尾
cancel_reply_before
cancel_reply_after
cancel_reply_link
must_log_in
logged_in_as
comment_field 为false时默认的内容表单将不显示,默认是true
id_form 控制HTML结构中<form>的id值,默认是commentform
class_form 控制HTML结构中<form>的class值,默认是comment-form
id_submit 控制HTML结构中<input type=”submit”>的id值,默认是submit
class_submit 控制HTML结构中<input type=”submit”>的class值,默认是submit
label_submit – 这个参数改变评论表单提交按钮文字,默认是:Post Comment
更多详细请看

要注意的是,如果你的主题是要给别人用的,特别是外国人,为了国际化,修改的内容要用 __() 这个函数包裹,可以方便翻译

<?php
$commenter = wp_get_current_commenter();
$req = get_option( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true'" : '' );
$fields =  array(
    'comment_notes_before' => '<p class="comment-notes">' . __( 'Your email address will not be published.' ) . '</p>',
    'author' => '<p><input id="author" placeholder="Name*" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="40"' . $aria_req . ' /></p>',
    'email'  => '<p><input id="email" placeholder="Email*" name="email" type="text" value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="40"' . $aria_req . ' /></p>',
    'comment_field' => '<p></label><textarea id="comment" placeholder="Message*" name="comment" cols="45" rows="8" aria-required="true"></textarea></p>',
);
$args = array(
    'fields' =>  $fields,
    'title_reply'=>'Contact Form',
    'label_submit' => 'Send Message',
    'comment_field' => false,
    'comment_notes_before' => false
);

comment_form($args);
在有表单的页面之间放入 <?php comments_template(); ?> 就可引入comments.php文件

在某些情况下,你希望以不同的方式来显示你的评论,这时可以建立一个自定义的文件(例如 other-comments.php),并且通过下面的方式调用:
<?php comments_template( '/other-comments.php' ); ?>

next_post_link()函数和 previous_post_link()函数

next_post_link()函数用来实现上一篇功能

实例

<?php previous_post_link('Pre: %link') ?> //实现上一篇功能 next_post_link()函数用来实现下一篇功能

语法结构

<?php next_post_link( $format, $link, $in_same_term = false, $excluded_terms = '', $taxonomy = 'category' ); ?>

参数

$format可以写作为%link

$link指的是链接的文本,默认是%title

$in_same_term指的是是否在相同的分类,默认是false不是相同分类

$excluded_terms指的是在显示上一篇或下一篇时是否排除掉某分类,缺省不排除,如果排除,把分类ID列在此处,以英文逗号分隔

$taxonomy指的是分类名称,默认是category

<?php next_post_link('Next: %link') ?> //实现下一篇功能

只需要把这两段代码放入你的 HTML 程序中即可,简单实用,不过这种方法实现的上一篇下一篇功能是不分类别的,如果想要只显示相同类别的文章则需要用下面的代码了。除了调用外,还需要进行判断上一篇或下一篇是否有日志,代码如下:

<?php if (get_previous_post()){
    previous_post_link("Pre: %link","%title",true);
}else{
    echo "Pre: None";
} ?>

<?php if (get_next_post()){
    next_post_link("Next: %link","%title",true);
}else {
    echo "Next: None";
} ?>

上面的代码默认设置为同一分类下的上一篇和下一篇了,如果不需要,则把 true 改成 false,或者直接删除 true 即可。其实把这两段代码放入程序中会发现当没文章时会显示空白,解决办法是给特定的分类下指定 ID,全部代码如下

<?php
$categories = get_the_category();
$categoryIDS = array();
foreach ($categories as $category) {
    array_push($categoryIDS, $category->term_id);
}
$categoryIDS = implode(",", $categoryIDS);
?>

<?php if (get_previous_post()){
    previous_post_link("Pre: %link","%title",true);
}else{
    echo "Pre: None";
} ?>

<?php if (get_next_post()){
    next_post_link("Next: %link","%title",true);
}else {
    echo "Next: None";
} ?>

这样当没有上一篇或下一篇文章时就会显示 None

get_next_post()函数

get_next_post()函数用于获取下一篇文章的信息,包括:文章内容、摘要、状态、标题、作者、发布时间等。

语法结构 get_next_post( boolean $in_same_term = false, string $excluded_terms = '', string $taxonomy = 'category' )

参数

$in_same_term 布尔值,默认值:false,是否只返回相同分类下的文章

$excluded_terms 字符串值,默认为空,需要排除的分类ID,用半角逗号分隔多个ID

$taxonomy 字符串值,默认值:category,自定义分类法的名称
<?php
$next_post = get_next_post();
if (!empty( $next_post )): ?>
  <a href="<?php echo get_permalink( $next_post->ID ); ?>"><?php echo $next_post->post_title; ?></a>
<?php endif; ?>

get_previous_post()函数

get_previous_post()函数用于获取上一篇文章,可以限制返回相同分类的上一篇文章,需要用在文章页面模板里

语法结构 <?php get_previous_post( $in_same_cat, $excluded_categories ) ?>

参数

$in_same_term:(bool)(Default: false)文章是否在同一分类

$excluded_terms:(string)(Default : ”)排除分类的ID
<?php
$prev_post = get_previous_post();
if (!empty( $prev_post )) {
    echo '<a href="' . get_permalink($prev_post) . '">' . $prev_post->post_title . '</a>';
}
?>

the_excerpt()函数

wordpress 内置函数 the_excerpt() 是个使用频率较高的函数,它是用来获取当前文章摘要的,以[…]结尾,如果在文章中没有编辑内容摘要字段,则默认截取文章的前 55 个字的内容,默认截取的字段去掉 HTML 标签和图形,并且一定要在循环内使用。

这个标签没有任何的参数,直接使用即可,但函数默认的设置有时候并不能满足用户的需要,比如国内用户以[…]结尾就很不习惯,另外截取前 55 个字符有时候会太少了,还有文章摘要的结尾是不是我们可以自定义加个更多的链接呢,这些自定义只需要在主题 functions.php 文件中加入相应的代码就可以了。

functions.php中的代码

//设定摘要的长度
function new_excerpt_length($length) {
    return 150;
}
add_filter('excerpt_length', 'new_excerpt_length');

//把摘要默认的结尾[...]换成...
function new_excerpt_more(){
    global $post;
    return " <a href="". get_permalink($post->ID) . "">阅读更多</a>";
}
add_filter('excerpt_more', 'new_excerpt_more');
//在页面中直接调用摘要
<?php the_excerpt();?>

//也可以采用这种方法,但是测试的结果却是摘要字符无法截断,如果能截断这个是比较完美的一个方法
<?php if(has_excerpt()){
    the_excerpt();
} else{
    echo mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0, 75, "…");
}?>

get_the_excerpt() 返回文章摘要赋值给变量

add_settings_section()函数

add_settings_section()函数的作用主要是为 WordPress 后台-Settings 里面的某个栏目添加一个能够实现 add_settings_field( )函数添加自定义变量的区域,与 add_settings_field( )函数配合使用可以实现 Settings 里面的某个栏目(’general’, ‘reading’, ‘writing’, ‘discussion’, ‘media)添加自定义变量的功能。

用法

<?php
add_settings_section(
    string $id,
    string $title,
    callable $callback,
    string $page
) ;
?>
<?php
add_settings_section(
    'xk_settings_section', // 此处自己命名,用于标签的ID属性
    '联系方式', // 显示在页面的标题
    'xk_settings_section_callback', // 页面回掉
    'general' // 设置里面的栏目包括:'general', 'reading', 'writing', 'discussion', 'media'
);
?>

add_action()函数

add_action()函数:将函数连接到指定 action(动作)。

<?php
    add_action( $tag, $function_to_add, $priority, $accepted_args );
?>

对应的执行这个特定动作的函数:

<?php
    do_action(string $tag, $arg = '');
?>

参数

$tag(字符串)(必填)$function_to_add 所挂载的动作(action)的名称。(在Plugin API/Action Reference 上查看动作hook列表)。也可以是一个主题或插件文件内部的一个动作,或者特定的标签“all”,这个函数将被所有的钩子(hooks)调用。默认值:None
$function_to_add(回调)(必填)你希望挂载的函数的名称。注:在 PHP“回调”类型文档中 所罗列的字符串格式化的语法均可用。默认值:None
$priority(整数)(可选)用于指定与特定的动作相关联的函数的执行顺序。数字越小,执行越早,具有相同优先级的函数在它们被添加到动作的顺序执行。默认值:10

wp_list_comments()函数

wp_list_comments 函数是一个循环输出当前文章或页面每个评论的函数,在 WordPress 主题中主要被用来输出每一条评论,省去我们手工便利之苦,也把 WordPress 的评论功能很好的进行了模块化。

wp_list_comments 函数在主题中配合 comments_template()函数联合使用可以很好的将 WordPress 的评论功能独立出来,而且可以更好对评论嵌套层数、每页显示评论数量、评论样式等等进行控制。所以如果你想做好主题的话,那还是看一下吧。

语法

<?php wp_list_comments( $args ); ?>
参数使用
<?php $args = array(
    'walker'            => null,
    'max_depth'         => ,
    'style'             => 'ul',
    'callback'          => null,
    'end-callback'      => null,
    'type'              => 'all',
    'reply_text'        => 'reply',
    'page'              => ,
    'per_page'          => ,
    'avatar_size'       => 32,
    'reverse_top_level' => null,
    'reverse_children'  =>  ); ?>

‘walker’ 自定义样式类名 ‘max_depth’ (整数)应该提取评论多深(在评论回复中) '$style' 评论容器标签可以是 ‘div’, ‘ol’, or ‘ul’,默认值是’ul’,如果不是,那你需要像如下那样明确写出。

<div class="commentlist">
    <?php wp_list_comments(array('style' => 'div')); ?>
</div>

<ol class="commentlist">
    <?php wp_list_comments(array('style' => 'ol')); ?>
</ol>

‘callback ‘ 评论显示的回调函数,即显示评论主题的函数名称 ‘end-callback’ 应该是循环结束后的回调函数,本人未实测,请自行探索。 ‘type’ 显示何种评论,参数可以是 ‘all’、’comment’、’trackback’、’pingback’、’pings’. ‘pings’ 包括’trackback’ 和 ‘pingback’. 默认值: ‘all’ ‘reply_text’ 回复按钮的文本值,这个较少用不解释 默认值: ‘Reply’ ‘page’(integer)在分页中显示的当前页面。 ‘per_page’(integer)每个评论页面显示的项目数量。 ‘avatar_size’(integer)头像应显示的大小(以像素为单位)。 http://gravatar.com/支持1到512之间的大小。使用0隐藏头像。 ‘reverse_children’ 布尔值,如果设置本参数为真,则先显示最新一条有子评论的评论,后面的评论按照后台设置显示。 ‘reverse_top_level’ 布尔值,如果设置本参数为真,则先显示最新一条评论,后面的评论按照后台设置显示。

get_template_part()函数

get_template_part() 函数用于调用自定义模板文件,也可以引入自定义名字的文件。使用 get_template_part()函数,可以更灵活的控制主题,我觉得 get_template_part()函数最大的好处就是大大的减少了代码的重写量。

我们知道,调用 header.php 可以用 get_header()方法,调用 footer.php 可以用 get_footer()方法,调用 sidebar.php 可以用 get_sidebar()方法,那么,调用自定义模板文件的时候,我们需要用 get_template_part()函 数。这好比如原生的 php 也有 require 及 include 两种引入文件方法是一个道理。

为什么要自定义模板文件 比如,分类页、标签页、作者页、甚至首页可能都需要用到一段共同的代码——如以摘要方式输出文章。那么,我们可以将这段代码放到 content.php 中,然后在分类、标签、和首页模板文件调用 content.php,以减少代码重写量。

get_template_part()函数的使用很灵活,不仅仅是加载一个模板文件进来,而且还有备用的选项,调用代码如下:

语法结构 <?php get_template_part( $slug, $name ); ?>

参数

$slug (必须) 通用的模板名(字符串)要引入的模板的文件名,不包括后缀名 .php,也就是如果需要引入当前主题根目录的 content.php 文件 $slug 填写 ‘content’ 即可。
$name (可选) 指定的模板名(字符串)要引入的模板的文件的副文件名,如果要引入当前主题根目录的 content-nav.php 文件 $slug 参数填写 ‘content’,$name 参数填写 ‘nav’。

如果 content-loop.php 存在,则调用 content-loop.php,否则,就调用 content.php

<?php get_template_part( 'content', 'loop' ); ?>

引入当前主题根目录的 tags.php 文件:

<?php get_template_part( 'tags' ); ?>

引入当前主题 inc 目录的 myfunctions.php 文件:

<?php get_template_part( 'inc/myfunctions' ); ?>

调用主题 partials 文件夹下 content-page.php

<?php php get_template_part( 'partials/content', 'page' ); ?>

get_post_meta()函数

get_post_meta()函数用来获取指定日志的指定 key 的自定义字段

语法结构

<?php $meta_name = get_post_meta($post->ID, $key, $single); ?>

参数

$post->ID (整数)要添加自定义栏目文章的ID
$key (字符串) 必须是此自定义栏目的名称
$single (布尔型) (可选) 如果设为true, 则返回单个的自定义栏目的值。如果设为false, 则返回一个数组字符串型,即多个自定义栏目的值。

(mixed)
这个函数返回值比较复杂:
[list]
如果只设置了 $post_id 的值,返回该日志的所有自定义字段的关联数组。
如果 $single 设置为 false 或者留空,返回指定 key 的所有值的一个数组。
如果 $single 设置为 true,返回指定 key 的第一个值(并且不是在一个数组中)。
如果没有东西可以返回的时候,返回空数组,除非 $single 设置为 true ,则返回空字符串。
还有一种特殊情况就是,自定义字段的值是序列化的数组,这样 $single 设置为 true,则返回未序列化的数组,而 $single 设置为 false 或者留空,则你会获取一个数组,其中的一个值是序列化之后的字符串,你需要使用 maybe_unserialize 函数将其解析成数组。

global $post //WordPress内置的一个全局变量,存储当前文章的信息例如ID

知识要点

一、可以通过后台添加的自定义栏目对应数据存放位置在 wp_postmeta 数据表中 二、get_post_meta()需要用到当前文章 ID,可以通过全局变量$post->ID 获取 三、一个自定义栏目可以对应多个值及获取方法 四、可以通过 add_post_meta()方法添加自定义栏目 五、如何创建隐藏的自定义栏目 六、如何使用 update_post_meta()方法更新自定义栏目 七、如何使用 delete_post_meta()方法删除自定义栏目

delete_post_meta()函数

delete_post_meta()函数用来删除指定日志,指定 key 或者 key 和 value 的所有自定义字段

语法结构

<?php delete_post_meta($post_id, $meta_key, $meta_value); ?>

参数

$post_id(integer) (required) 将要删除自定义字段的日志 ID。Default: None

$key(string) (required) 将要删除自定义字段的名称(key)。Default: None

$value(boolean) (optional) 将要删除的自定义字段的值,这是用来区分相同 key 的几个字段,如果留空了,则当前日志下指定 key 的多个值都将被删除。Default: Empty

返回值

删除成功返回 true,失败返回 false

假设你添加了一些自定义字段,现在要删除添加的自定义字段,字段是 related_posts

<?php delete_post_meta($postinfo->ID, 'related_posts'); ?>

add_post_meta()函数

add_post_meta()函数用来添加一个自定义栏目。

语法结构 <?php add_post_meta($post_id, $key, $value, $unique); ?>

参数

$post_id 要添加自定义字段的文章或页面的ID值
$key 自定义栏目的名称)
$value 自定义字段的值
$unique 如果已经有相同名字的自定义字段,是否重复添加重名的自定义字段,true为不允许,false为允许

'$key'关键字不存在时添加新字段,关键字存在时则更新已有字段

update_post_meta()函数

update_post_meta()函数用来更新和建立指定文章自定义字段

语法结构 <?php update_post_meta($post_id, $meta_key, $meta_value); ?>

参数

$post_id – 要更新(添加)自定义字段的文章或页面的ID值
$meta_key – 自定义字段的键值(名字)
$meta_value – 自定义字段的值
$prev_value – 批量替换时用的参数

update_post_meta()函数是和 add_post_meta()函数相对应的一个函数,用法功能类似

add_meta_box()函数

add_meta_box()函数是被用来在文章编辑等页面添加一个设置的区域的函数。

创建的文章类型默认的仅有标题、作者、分类、标签、日期和评论,这些也许对博客已经足够使用了,但是对于产品类型的文章来说,不仅仅需要标题和正文,还需要单独设置一些其它的参数,如产品价格、产品型号、规格大小等,那么就需要给文章类型添加 Meta Box,通俗点理解就是自定义字段表单,下面就来以实例讲解下这个函数的用法。

语法结构

<?php add_meta_box(
    $id,
    $title,
    $callback,
    $post_type,
    $context,
    $priority,
    $callback_args
);
?>

参数

$id(字符串)(必需)字段id,唯一
$title(字符串)(必需)标题名称,显示在文章编辑页面
$callback(回调)(必需)回调函数
$post_type(字符串)(必需)文章类型
$context(字符串)(可选)显示位置,文章编辑页面包括’normal’, ‘side’, and ‘advanced’的形式,Menus meta boxes仅用’side’的形式
$priority(字符串)(可选)优先级,默认值: ‘default’
$callback_args(数组)(可选)传递到 callback 函数的参数。callback 函数将接收 $post 对象和其他由这个变量传递的任何参数。
add_action( 'add_meta_boxes', 'product_price' );
function product_price() {
    add_meta_box(
        'product_price',
        '产品价格',
        'product_price_meta_box',
        'store',
        'side',
        'low'
    );
}

创建回调函数 product_price_meta_box

配置参数里面指定了回调函数 product_price_meta_box,需要在这个函数里面创建表单,

隐藏的自定义字段

插件/主题开发人员如果需要用自定义字段来保存插件或模板相关参数,会发现 WordPress 不会在页面/文章编辑页的自定义字段列表上显示以”_”(下划线)开始的关键字。这样就可以在自定义参数中将下划线作为第一个字符,这些设置将按自定义字段被保留,但却不会在管理者用户界面的自定义字段中显示出来。

function product_price_meta_box($post) {
    // 创建临时隐藏表单,为了安全
    wp_nonce_field( 'product_price_meta_box', 'product_price_meta_box_nonce' );
    // 获取之前存储的值
    $value = get_post_meta( $post->ID, '_product_price', true );
    ?>
    <label for="product_price"></label>
       <input style="width:180px" type="text" id="product_price" name="product_price" value="<?php echo esc_attr( $value ); ?>" placeholder="输入产品价格">
       <span>价格</span>
    <?php
}

提示:添加上面代码后,新建文章时,在右则就可以看到一个产品价格的输入框。

这时候表单还不能用,因为提交文章之后并没有保存这个 Meta Box 的内容,下面是验证保存内容的代码:

add_action( 'save_post', 'product_price_save_meta_box' );
function product_price_save_meta_box($post_id){
    if ( ! isset( $_POST['product_price_meta_box_nonce'] ) ) {
        return;
    }
    if ( ! wp_verify_nonce( $_POST['product_price_meta_box_nonce'], 'product_price_meta_box' ) ) {
        return;
    }
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
    }
    if ( ! isset( $_POST['product_price'] ) ) {
        return;
    }
    $product_price = sanitize_text_field( $_POST['product_price'] );
    update_post_meta( $post_id, '_product_price', $product_price );
}

把上面的代码按顺序添加到主题的 functions.php 文件,至此,Meta Box 注册完成,就可以开始添加参数了:

调用代码

<?php
if(get_post_meta($post->ID,'_product_price',true)){
    echo get_post_meta($post->ID,'_product_price',true);
}
?>

把 META BOX 添加把后台所有产品列表字段中显示

通过 manage_$post_type_posts_custom_column 实现,代码如下

add_filter('manage_store_posts_columns', 'add_new_product_columns');
function add_new_product_columns($columns) {
    $columns['id'] = 'ID';
    $columns['product_price'] = '产品价格';
    return $columns;
}

add_action('manage_store_posts_custom_column', 'manage_posts_columns', 10, 2);
function manage_posts_columns($column,$id) {
    global $post;
    switch ($column) {
        case 'id':
            echo $id;
            break;
        case 'product_price':
            echo get_post_meta( $post->ID, '_product_price', true );
            break;
    }
}

wp_nonce_field()函数

在 wordpress 中,为了增加系统的验证安全性,内置了一些简单的验证,这些验证可以有效的防治注册、提交等操作,如果开发者在主题开发中,对数据库进行了操作,一定要使用到这些函数

语法结构 <?php wp_nonce_field($action, $name, $referer, $echo) ?> //为输入框检索或显示随机数隐藏字段

参数

$action(可选)操作名称
$name (可选)Nonce名称
$referer(可选)是否还应使用wp_referer_field()函数创建referer隐藏表单字段,默认值:true
$echo(可选)如果$referer参数设置为true,是显示还是返回nonce隐藏表单字段,还是referer隐藏表单字段。默认值:true

<? php wp_nonce_field(); ?> //最简单的使用方法,省略所有参数,在表单中添加内容,安全性偏低

最好给$action和$name命名,可以较大提高WordPress安全性
<form method =“post”>
   <! - 这里的一些输入......  - >
   <?php wp_nonce_field('name_of_my_action','name_of_nonce_field'); ?>
</form>

Nonce 是 WordPress 安全的一个重要组成部分,但是 Nonce 经常会被误解以及误用。它们是授权一个 HTTP 请求到您的网站的一个关键部分,用来保证你的代码安全。

在这篇文章中,您将了解什么是 nonce,一个 WordPress nonce 是什么,它们是如何能够防御某些类型的攻击,还有他们无法防御的攻击类型,以及如何使用它们。

什么是 Nonce

Nonce 是加密散列,用来验证是否是正确的人或客户端所发送的请求。因为 nonce 是使用一个加密散列算法(例如 md5,sha1,sha2)和某种形式的秘密数据构造的,一般来说不太可能创建一个假的 nonce。

nonce 这个单词意思是:仅使用一次的数字。nonce 安全性的一个关键特性就是一次性使用。即使你拦截获得了一个有效的 nonce,一旦它被使用了,就无法再次使用。这个使得 nonce 对于重复攻击很有效。

就是说,WordPress nonce,并不是真正的 nonce,因为它可以在某段时间内一直有效,可以通过 nonce_life(详见 Code Reference) 这个 filter 来定义它从创建开始的时效。这个意味着从技术上讲 WordPress nonce 可以使用不止一次,但仅限这个定义的时间段里。这个是需要谨记在心的区别。 跨站点请求伪造 我们经常认为我们的 WordPress 站点仅仅通过填写表单(如结账表单,文章编辑器,用户个人资料编辑器等等),然后点击提交来接受数据。但是那个仅仅是向一个站点发送 HTTP 请求的许多方法中的一个。

一旦一个表单的结构被摸清,然后就可以写一个脚本来模仿向这个表单发送请求。利用此漏洞来进行攻击的一种方式就是:在另外一个站点放上此表单的假版本,然后提交回原站点,来插入恶意数据。

这个就是一个跨站点请求伪造(CSRF)的攻击例子。它很大程度上可以通过使用 nonce 来避免。即使表单保持一模一样,然而 nonce 字段的值无法猜到。

每个发送给 WordPress 站点的请求,一个选项表单,一个针对 admin-ajax 的请求,Wordpress REST API,或者其他任何可以在站外发起的请求,都应该通过 nonce 来保护。 Nonce 只是整个系统的一部分 需要记住的是:仅验证一个 nonce,对于确定发送的请求是否经过授权是不够的。对于任何一个请求,权限的检验都是必要的。思考下面 3 个在 WordPress 插件中使用 admin-ajax 保存选项的例子:

<?php
add_action( 'wp_ajax_save_weibo', function(){
    if( isset( $_POST[ 'weibo' ] ) ){
        update_option( 'weibo', strip_tags( $_POST[ 'weibo' ] ) );
    }
});

add_action( 'wp_ajax_save_weibo', function(){
    if( current_user_can( 'mange_options' ) && isset( $_POST[ 'weibo' ] ) ){
        update_option( 'weibo', strip_tags( $_POST[ 'weibo' ] ) );
    }
});

add_action( 'wp_ajax_save_weibo', function(){
    if( current_user_can( 'mange_options' ) && isset( $_POST[ 'weibo-save-nonce' ],  $_POST[ 'weibo' ] ) && wp_verify_nonce( $_POST[ 'weibo-save-nonce' ], 'weibo-save-nonce' ) ){
        update_option( 'weibo', strip_tags( $_POST[ 'weibo' ] ) );
    }
});
?>

第一个例子允许任何拥有有效 cookie 的任何角色的用户来更新这个选项。如果你在 WordPress 站点使用这个代码,而我注册为一个订阅者,我可以登录到这个网站,获得我的 cookie,然后就可以使用浏览器控制台或者在我的 terminal 中使用 cURL 来修改这个选项。这是非常不安全的做法。

第二个例子会好一些,但是仍然不安全。这个代码中没有 nonce,但是它正确的检查了当前用户的权限。没有 nonce,正如我们前面讲的会受到跨站点请求伪造的攻击影响。这段代码就是钓鱼攻击网站的邀请函啊。

第三个例子增加了一个 nonce,这是正确的做法。如果我有个管理员 cookie 设置,同时我轻易被钓鱼网站欺骗了,这时候 nonce 将会起作用,让它通过不了,也就不会造成任何破坏。

Nonce 配合着身份验证一起工作,这样就无法跳过这一个或者另一个验证了。 使用 Nonce WordPress 有着一系列的函数来和 nonce 配合工作。其中两个最重要的函数是 wp_create_nonce() 和 wp_verify_nonce。都可以为动作执行(action)传入可选参数。你应当始终为你的请求设置唯一的动作执行(action)。这意味着你的 nonce 不可以用来重复验证另外一种类型的请求。

对于 nonce 在表单中使用,有一个助手函数(helper function)叫 wp_nonce_field(),可以用来创建一个 nonce 隐藏字段。下面这个表单可以和上面例子配合:

<form id="weibo-form">
    <label for="weibo-name">
        <?php esc_html_e( 'Weibo', 'text-domain' ); ?>
    </label>
    <input type="text" id="weibo-name" value="<?php echo esc_attr( get_option( 'weibo', '')  ); ?>" />
    <?php
        wp_nonce_field( 'weibo-save-nonce' );
        submit_button( __( 'Save', 'text-domain' ) );
    ?>
</form>
<script>
    jQuery( document ).ready(function($){
        $( '#weibo-form' ).on( 'click', function(e){
            $.post( ajaxurl, {
                'weibo-save-nonce' : $( '#_wpnonce' ).val(),
                weibo: $( '#weibo-name')
            })
        });
    });
</script>

这个将会用在只有管理员可以看到的菜单页面。因此 nonce 在被使用输出到屏幕显示的时候,只有管理员可以看到。在 admin-ajax 的回调函数中,nonce 验证和权限验证,结合 WordPress 对用户 cookie 的验证,一起来保证安全。

在这个例子中,我们使用了 AJAX 来提交表单,但是对于同步 HTTP 请求,这个过程是一样的。 现在就开始使用 Nonce 这就是关于 nonce 的一切了。为了提高 WordPress 网站的安全性,记住,无论如何都要使用 Nonce。

在我总结之前,还有另外两个观点需要说的是:

关于 Nonce 有一个重要的事情需要谨记在心的是,nonce 其中的一个组成部分就是当前用户的 ID,如果没有登录就是 0。这个意味着 nonce 在用户之间不可分享。这个可能会让人产生困惑,就是如果 nonce 在用户身份验证之前验证,那么正确的 nonce 将会无效。当一个 nonce 伴随着 WordPress REST API nonce 用来验证 cookie 身份验证被使用时,这就是一个会发生的问题。

另外一个重要的事情需要记住的是,nonce 会受到 PHP 计时攻击的影响。这就是为什么 WordPress 用户需要故意使用低效率的函数 hash_equals() 替代简单高效的字符串比较。你可能产生过通过生成一个期望的值然后用字符串比较来验证一个 nonce 的念头。然而,我建议你不要尝试和优化 nonce 验证的过程。

就这么多,仅仅简单地介绍了如何使用 nonce。我希望通过这篇文章你可以看到 nonce 是多么的简单,以及对于保证你的代码和站点安全是多么的重要。

wp_verify_nonce()函数

wp_verify_nonce()函数检查是否在时间范围内使用了正确的随机数

语法结构 <?php wp_verify_nonce($nonce, $action); ?>

参数

$nonce(字符串)(必需)用来验证的随机数,默认值:None
$action(字符串)(整数)解释当前操作,生成随机数后也应进行同样解释。默认值:-1,返回的值无论随机数是否通过验证,都返回布尔变量。

is_tax()函数

is_tax() 函数用来检测当前是否属于自定义分类的归档页面,返回的值是 TRUE 或 FALSE。学习如何注册自定义分类请查阅这篇文章:register_taxonomy()函数

<?php is_tax( $taxonomy, $term ); ?>

参数

$taxonomy:(字符串,数组)(可选)分类别名或别名。默认值:None

$term:(整型,字符串,数组)(可选)单个或数组项 ID,名称或别名。默认值:None

返回值:(布尔值)成功返回 True,失败返回 false

TIPS 如果省却参数,则代表所有自定义分类的归档页。

is_tax();
//只要是自定义分类归档的页面都返回 true
is_tax( 'products' );
//自定义分类名为 products 的归档页面返回 ture
is_tax( 'products', 'cases' );
//自定义分类为“products”而且属于“cases”的分类下的归档页面返回 true

get_the_posts_pagination()函数

get_the_posts_pagination()函数实现 WordPress 的分页功能,此函数用法和 the_posts_pagination()函数基本一样,但也有细微不同,需要输出才行。

语法结构

<?php $pagination = get_the_posts_pagination( array $args = array() ); ?> //实现WordPress分页功能

参数

mid_size( int) – 当前页面任一侧有多少个数字,但不包括当前页面
prev_text( string) – 上一页
next_text( string) – 下一页
<?php function par_pagenav(){
    $pagination = get_the_posts_pagination(array(
        'mid_size' => 3,
        'prev_text' =>'<',
        'next_text' =>'>',
        )
    );
    echo $pagination;
}

上面这段代码写在functions.php文件内,然后在需要分页位置输入<?php par_pagenav(); ?>即可

加上相应的 css 即可得到如下效果

get_the_posts_pagination()函数

the_posts_pagination()函数

the_posts_pagination()函数主要是实现 WordPress 的分页功能

语法结构 the_posts_pagination(array $args = array()) //实现WordPress分页功能

参数

mid_size( int) – 要显示到当前页面任一侧的页码数。默认为1。
prev_text( string) – 上一页
next_text( string) – 下一页
function par_pagenav(){
    the_posts_pagination(array(
        'mid_size' => 3,
        'prev_text' => '<',
        'next_text' => '>',
        )
    );
}
上面这段代码写在functions.php文件内,然后在需要分页位置输入<?php par_pagenav(); ?>即可

加上相应的 css 即可得到如下效果

the_posts_pagination()函数

register_widget()函数

register_widget()函数是用来注册一个新的小工具。

语法结构 <?php register_widget( $widget_class ) ?>

参数 $widget_class指的是注册小工具的类的 extends WP_Widget

<?php class ProductWidget extends WP_Widget {
    public function __construct() {
        $widget_pro = array ( //一个数组提供了Widget的一些基本信息
            'description' => "设置侧边栏产品"
        );
        parent::__construct('pic', "近期产品",$widget_pro);
    }
    // $args中包含了4个值:before_title,after_title,before_widget,after_widget,
       分别是要显示在title和widget前后的html。
    // $instance是当前Widget的一些属性设置
    public function widget( $args, $instance ) {
        $url = $instance[ 'depth' ];
        $link = $instance[ 'link' ];
        $title = $instance['title'];
        extract( $args );
        echo $before_widget;
        ?>
        <div class="pic">
            <a href="<?php echo $link; ?>"><img src="<?php echo $url; ?>" title="<?php echo $title; ?>" alt="<?php echo $title; ?>" style="max-width: 100%;"></a>
        </div>
        <?php
    }

    public function form( $instance ) {
        // Output admin widget options form
        $defaults = array(
            'depth' => '-1'
        );
        $depth = $instance[ 'depth' ];
        $link = $instance[ 'link' ];
        $title = $instance['title'];
        // markup for form
        ?>
        <p>
            <label for="<?php echo $this->get_field_id('title'); ?>">填写图片标题</label>
            <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id( 'depth' ); ?>">填写图片地址</label>
            <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'depth' ); ?>" name="<?php echo $this->get_field_name( 'depth' ); ?>" value="<?php echo esc_attr( $depth ); ?>">
        </p>
        <p>
            <label for="<?php echo $this->get_field_id( 'link' ); ?>">填写图片链接</label>
            <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'link' ); ?>" name="<?php echo $this->get_field_name( 'link' ); ?>" value="<?php echo esc_attr( $link ); ?>">
        </p>
        <?php
    }
    public function update( $new_instance, $old_instance ) {
        // Save widget options
        $instance = $old_instance;
        $instance[ 'depth' ] = strip_tags( $new_instance[ 'depth' ] );
        $instance[ 'link' ] = strip_tags( $new_instance[ 'link' ] );
        $instance['title'] = strip_tags($new_instance['title']);
        return $instance;
    }
}
function register_widgets() {
    register_widget( 'ProductWidget' );
}
add_action( 'widgets_init', 'register_widgets' );

unregister_widget()函数用来删除默认的小工具

语法结构

<?php unregister_widget( $widget_class ) ?>

$widget_class指的是一些已WordPress定义的类

function remove_default_widgets() {
    unregister_widget('WP_Widget_Pages'); //Pages Widget 页面
    unregister_widget('WP_Widget_Calendar'); //Calendar Widget 日历
    unregister_widget('WP_Widget_Archives'); //Archives Widget 文章归档
    unregister_widget('WP_Widget_Media_Audio '); //Audio Player Media Widget 视频
    unregister_widget('WP_Widget_Media_Image '); //Image Media Widget 画廊
    unregister_widget('WP_Widget_Media_Video'); //Video Media Widget 音频
    unregister_widget('WP_Widget_Meta'); //Meta Widget 功能
    unregister_widget('WP_Widget_Search'); //Search Widget 搜索
    unregister_widget('WP_Widget_Text'); //Text Widget 文本
    unregister_widget('WP_Widget_Categories'); //Categories Widget 分类目录
    unregister_widget('WP_Widget_Recent_Posts'); //Recent Posts Widget 近期文章
    unregister_widget('WP_Widget_Recent_Comments'); //Recent Comments Widget 近期评论
    unregister_widget('WP_Widget_RSS'); //RSS Widget
    unregister_widget('WP_Widget_Tag_Cloud'); //Tag Cloud Widget 标签云
    unregister_widget('WP_Nav_Menu_Widget'); //Menus Widget 导航菜单
    unregister_widget('WP_Widget_Custom_HTML') //Custom HTML Widget 自定义HTML
}
add_action('widgets_init', 'remove_default_widgets'); <br>

dynamic_sidebar()函数和 is_dynamic_sidebar()函数

dynamic_sidebar()函数用来支持小工具的调用的。

语法结构 <?php dynamic_sidebar($index); ?>

参数 $index:定义的小工具内边栏的名称或者ID

<?php if (is_active_sidebar('left-sidebar' )):?>
    <ul id="sidebar">
        <?php dynamic_sidebar('left-sidebar' );?>
    </ul>
<?php endif;?>

is_dynamic_sidebar()函数用来验证注册的边栏是否添加小工具,如果侧边栏里面添加了任何一个小工具则返回 true,否则为 false

语法结构

<?php is_dynamic_sidebar(); ?>

if (is_dynamic_sidebar('left-sidebar')){
    dynamic_sidebar('left-sidebar');
}

register_sidebar()函数

register_sidebar()函数注册一个单独的侧边栏区域和返回 ID

<?php register_sidebar(
    array(
        'name'          => '侧边栏',
        'id'            => 'unique-sidebar-id',
        'description'   => '',
        'class'         => '',
        'before_widget' => '<div class="s-con text-center">',
        'after_widget'  => '</div>',
        'before_title'  => '<h2 class="widgettitle">',
        'after_title'   => '</h2>'
    )
); ?>

参数

name – 侧边栏的名字(默认是 ‘Sidebar’ 加 数字 ID)
id – 侧边栏 ID,必须全部小写,不带空格(默认是一个自动递增的数字 ID)
description – 用来说明侧边栏是什么,在哪里显示的文字。会在小工具管理界面显示。(默认为空)
class – 分配到小工具 HTML输出中的CSS选择器名字(默认为空)
before_widget – 在每个小工具前面输出的 HTML代码(默认: ‘<li id=”%1$s” class=”widget %2$s”>’)
after_widget – 在每个小工具后面输出的 HTML代码(默认: “</li>”)
before_title – 在标题前输出的 HTML代码(默认: <h2 class=”widgettitle”>)
after_title – 在标题后输出的 HTML代码(默认:”</h2>”)

add_options_page()函数

为 WordPress 后台 Settings 顶级栏目创建一个子栏目

语法结构

<?php
add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);
?>

参数

$page_title
$menu_title:菜单名称
$capability:权限
$menu_slug
$function 回调函数
<?php
/** 第1步:定义添加菜单选项的函数 */
function my_plugin_menu() {
     add_options_page(
        'My Plugin Options',
        'My Plugin',
        'manage_options',
        'my-unique-identifier',
        'my_plugin_options' );
}

/** 第2步:将函数注册到钩子中 */
add_action( 'admin_menu', 'my_plugin_menu' );

/** 第3步:定义选项被点击时打开的页面 */
//current_user_can()检测当前的用户是否有特定的权限
//wp_die()终断WordPress执行并显示错误HTML信息。
function my_plugin_options() {
     if ( !current_user_can( 'manage_options' ) )  {
          wp_die( 'You do not have sufficient permissions to access this page.' );
     }
     echo '<div class=wrap>Here is where the form would go if I actually had options.</div>';
}
?>

为其他顶级栏目创建子菜单的函数

Dashboard
<?php add_dashboard_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>

Posts
<?php add_posts_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>

Media
<?php add_media_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>

Links
<?php add_links_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>

Pages
<?php add_pages_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>

Comments
<?php add_comments_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>

Appearance
<?php add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>

Plugins
<?php add_plugins_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>

Users
<?php add_users_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>

Tools
<?php add_management_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>

wp_enqueue_script()函数

相信大部分人在制作 wordpress 主题引用 js 文件时,会直接在 header.php 或 footer.php 文件中添加 js 文件调用代码,其实 wordpress 主题最佳引用 js 文件的方法是使用 wordpress 内置的 wp_enqueue_script()函数,通过该函数可以安全地将 javascript 代码加入到 WordPress 创建的页面中,不仅可以最大限度地保证兼容性,还是提高 wordpress 性能效率的一个方法。

语法结构 <?php wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer ); ?>

参数

$handle – 调用的脚本名称,用于区别其它js,因此不能和其它js文件命名相同。
$src – js文件的路径(即url),不要直接使用域名url,要使用路径函数,如parent theme使用get_template_directory_uri,child theme使用get_stylesheet_directory_uri。
(WP模板路径相关的函数中,通常带有template的是指parent theme,带有stylesheet的指向child theme)
$deps – 依赖关系,加载的js文件所依存的其它js的标识字串数组(array:string),即需要在本代码之前加载的代码的名称
(如js脚本依赖jquery库,那么这里要用数组的形式写上jquery),非必需。
$ver – 加载js文件的版本号,作为查询字串附加在路径的末尾,作用是确保正确的版本信息传递给了客户端,以免受到缓存的影响
(如js脚本发生变化时,通过更改版本号可以强制客户浏览器更新缓存),默认为false,调用当前wordpress程序的版本号,如果不想显示,则设置为NULL(不推荐)。
$in_footer – boolean类型,设置js文件调用代码是否放置在html底部,设置为ture则放在底部,设置为false则放置在head部分。提示需要模板正确放置wp_footer()函数。

通过wp_enqueue_script函数加载js文件时,应该将它分配给一个钩子,如只在前台调用,使用钩子wp_enqueue_scripts;只在后台调用,使用admin_enqueue_scripts。

只在前台调用

<?php
function tone_front_script() {
   wp_enqueue_script( 'boot', get_template_directory_uri() . '/js/bootstrap.js');
}
add_action( 'wp_enqueue_scripts', 'tone_front_script' );
?>

只在后台调用

<?php
function tone_admin_script() {
   wp_enqueue_script('boot', get_template_directory_uri() . '/js/bootstrap.js');
}
add_action('admin_enqueue_scripts', 'tone_admin_script');
?>

另外一种方法,使用 wp_head 钩子和 admin_head 钩子

为WordPress后台添加css和js代码
<?php
    function admin_jscss() {
        wp_enqueue_style( 'admin-myjscss', get_template_directory_uri() . '/css/bootstrap.css' );
        wp_enqueue_script('admin-myjscss', get_template_directory_uri() . '/js/bootstrap.js' );
        wp_enqueue_script( 'admin-myjscss', get_template_directory_uri() . '/js/jquery.min.js' );
    }
    add_action('admin_head', 'admin_jscss');
?>

wp_enqueue_style()函数

在模板中直接使用 link 标签引用 css 样式文件是在 wordpress 主题开发中常用的方法,但这不是 wordpress 正确的引用 css 文件的方法,wordpress 正确引用方法是使用 wp_enqueue_style()函数。

语法结构 <?php wp_enqueue_style($handle, $src, $deps, $ver, $media); ?>

参数

$handle – 调用的样式文件名称,唯一性,因此不能和其它css文件命名相同。
$src – css文件的路径(即url),不要直接使用域名url,要使用路径函数,如get_template_directory_uri()来获取主题目录中的样式文件。
$deps – 依赖关系,如果丢失某些其他样式文件将导致你的样式表将无法正常工作,你可以使用该参数设置“依赖关系”。,非必需。
$ver – 加载的css文件的版本号,可以使用主题的版本号或随意自定义一个,设置为null则不使用版本号。默认为false,使用WordPress的版本号。
$media – 是指CSS的媒体类型,比如“screen”或“handheld”或“print”。如果不知道是否需要,就留空。默认为“all”。

通过 wp_enqueue_style()函数加载 css 文件时,应该将它分配给一个钩子,如只在前台调用,使用钩子 wp_enqueue_scripts;只在后台调用,使用 admin_enqueue_scripts;用在 WP 登陆页面加载则使用 login_enqueue_scripts。

只在前台调用

<?php
function tone_front_boot(){
    wp_enqueue_style( 'bootstrap', get_template_directory_uri() . '/css/bootstrap.css' );
}
add_action( 'wp_enqueue_scripts', 'tone_front_boot' );
?>

只在后台调用

<?php
function tone_admin_boot(){
    wp_enqueue_style( 'bootstrap', get_template_directory_uri() . '/css/bootstrap.css' );
}
add_action( 'admin_enqueue_scripts', 'tone_admin_boot' );
?>

另外一种方法,使用 wp_head 钩子和 admin_head 钩子

为WordPress后台添加css和js代码
<?php
    function admin_jscss() {
        wp_enqueue_style( 'admin-myjscss', get_template_directory_uri() . '/css/bootstrap.css' );
        wp_enqueue_script('admin-myjscss', get_template_directory_uri() . '/js/bootstrap.js' );
        wp_enqueue_script( 'admin-myjscss', get_template_directory_uri() . '/js/jquery.min.js' );
    }
    add_action('admin_head', 'admin_jscss');
?>

add_theme_support()函数

add_theme_support() 函数用于在我们的当前使用的主题添加一些特殊的功能,函数一般写在主题的 functions.php 文件中。

语法结构 <?php add_theme_support( $feature ); ?>

参数

$feature
(string) (必须) 需要添加特殊功能名称,可以是以下参数:
‘post-thumbnails’ —– 增加缩略图支持
‘automatic-feed-links’ 自动输出RSS
‘post-formats’—– 增加文章格式功能
‘custom-background’—– 增加自定义背景
‘custom-header’—– 增加自定义顶部图像
‘menus’——自定义导航菜单

post-thumbnails(启用文章缩略图功能)

从 WordPress2.9 版本开始,可以给模板添加文章缩略图功能,操作方法很简单,只需要把下面的代码添加到 functions.php 里面。也可以使用 wp_get_attachment_image_src()函数来实现前端添加缩略图功能。

//后台增加特色图像功能
add_theme_support('post-thumbnails');

//然后在要显示缩略图的地方放置下面的代码即可。
if(has_post_thumbnail()){
    the_post_thumbnail();
}

//仅在post中使用缩略图功能
add_theme_support( 'post-thumbnails', array( 'post' ) );

//仅在page中使用缩略图功能
add_theme_support( 'post-thumbnails', array( 'page' ) );

//仅在 post 和 movies 中使用
add_theme_support( 'post-thumbnails', array( 'post', 'movies' ) );

post-formats 添加支持文章格式

add_theme_support( 'post-formats', array(
    'aside',
    'chat',
    'gallery',
    'image',
    'link',
    'quote',
    'status',
    'video',
    'audio'
    )
);

WordPress 支持以下十个文章格式

Standard:只是一个普通的文章没有什么特别的东西
Aside:类似于一个facebook的更新
Chat:全文聊天
Image:只是一个简单的图像,没有什么巨大的
Link:链接到外部网站
Quote:引用
Status:一个简短的状态更新,类似于微博
Video:一个视频
Audio:音频文件

使用文章模板的方法 如果你只是想改变文章循环的不同的展现方式,只需要添加下面的代码到你的 single.php 中:

<?php get_template_part( 'content', get_post_format() ); ?>

现在,创建并且上传你的自定义格式循环文件到你正在使用的主题下,文件的命名应该为 content-{post-format}.php,例如:content-video.php 和 content-audio.php

最后不要忘记添加一个 content.php 文件,因为这将作为刚才的自定义格式循环文件的默认文件,如果自定义文件不存在,则使用自定义 single.php 文件。

如果你是一个新手,不想去折腾那些烦人的循环,那么只需要创建一个自定义音频文章格式,我们将给他命名为:single-video.php。接下来,上传 single-video.php 到你的主题的根目录下面,并且添加如下代码片段到 functions.php 中

add_action('template_include', 'load_single_template');
function load_single_template($template) {
    $new_template = '';
    // 文章模板
    if(is_single()){
        global $post;
        // 音频模板
        if (has_post_format('video')){
        // use template file single-video.php for video format
        $new_template = locate_template(array('single-video.php'));
        }
    }
    return ('' != $new_template) ? $new_template : $template;
}

现在,你就可以使用 single-video.php 这个文件作为你的文章形式了,在发布文章的时候选择它就 OK 了。总的来说,最后这方法比较简单,也比较容易懂。

wp_get_attachment_image_src()函数

特色图像是 wordpress 主要的文章缩略图功能,可以使用 add_theme_support()函数来开启缩略图功能 就是获取文章特色图像路径的 wordpress 函数,通过该函数可以返回一个包含图片路径、宽度和高度的有序数组。

语法结构

<?php wp_get_attachment_image_src( $attachment_id, $size, $icon ); ?>

Array
(
    [0] => url //图片地址
    [1] => width //图片宽度
    [2] => height //图片高度
    [3] =>  boolean //true表示返回了缩放后的图片,false表示返回了原始图片
)

参数

$attachment_id – 数值,必需,想要获取信息的附件ID,默认值:None
$size – 字符串,获取指定尺寸的图像,默认值:None,可选thumbnail, medium, large or full(对应后台——设置——多媒体的图像大小 ,full表示原始尺寸),或通过array(300,240)自定义图片大小。需要注意的是WordPress 2.5 以前的版本是没有 $size 参数的,只显示原始尺寸。
$icon – 布尔,可选,是否使用媒体图标来表示当前附件,比如:如果要获取的附件不是一张图片,而是,比如说视频,让$icon为真可以返回代表视频(mime type:video)的图标,否则只能返回空值。这些代表不同mime type的图片在wp-includes/images/crystal目录下
<?php get_post_thumbnail_id($post->ID); ?>获取文章缩略图ID

<?php if (has_post_thumbnail()){
    $array_image_url = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), array(255,204));
    echo $array_image_url[0];
} ?>

the_post_thumbnail()函数和 add_image_size()函数

the_post_thumbnail()函数用于获取文章的特色图像缩略图。如果文章没有添加特色图像功能,可以查看 add_theme_support()函数文章学习。

语法结构 the_post_thumbnail( string|array $size = 'post-thumbnail', string|array $attr = '' )

参数

$size(string|array) 图片大小,可以是以下几个关键字:thumbnail, medium, large, full。或者通过函数 add_image_size()函数定义尺寸的关键字。或者自定义宽和高的大小,比如:(32,32)。默认值是 ‘post-thumbnail’。

$attr(string|array)属性/值的一个数组,比如设置默认的class属性
直接使用
if(has_post_thumbnail()){
    the_post_thumbnail();
}

自定义缩略图的大小
if(has_post_thumbnail()){
    the_post_thumbnail(array(200,200)); // 显示200X200尺寸的缩略图
}
这种方法的优点的灵活,可以随时通过代码的调用显示不同尺寸的图片,缺点是如果有多处代码则修改起来麻烦

预置尺寸
用到此方法请先看下面的函数介绍

add_image_size()函数是设置 WordPress 中上传图片缩略图大小的一个函数

语法结构

add_image_size( string $name, int $width, int $height, bool|array $crop = false )

$name,要设置的缩略图名称,可接受thumbnail, medium, large, full等
$width, 设定的最大宽度
$height, 设定的最大高度
$crop,是否切割,如果设置为true则按照图片剪裁自定义的高度和宽度对图片进行剪裁,100%得到预设的图片尺寸,不会压缩图片的宽高比,但是会在原图的基础上进行裁剪,同时不能控制图片剪裁的起始点。false按照图片的原始长宽比进行剪裁,不会缺失图片的内容

TIPS

  1. 使用 WordPress 的内置函数 add_image_size()函数设置自定义图片剪裁,只会影响到今后新上传的图片,而不会对已有图片有影响。
  2. 尽可能少的去使用 add_image_size(),应为每一次上传图片之后,无论是否需要,系统都会自动的按照 add_image_size()函数设置进行剪裁,有可能造成大量无用图片占据网站空间;
  3. add_image_size()函数生成的图片仅能够在主题模版中使用,在编辑文章页内容时不能被使用。

比如我们想在首页和分类页面使用不同的缩略图大小,就可以先预置 homepage-thumb 和 category-thumb 这两大小。方法是在 functions.php 文件中加入以下代码

if ( function_exists( 'add_image_size' ) ){
    add_image_size( 'category-thumb', 200, 200 ); // 预置一个名为’category-thumb’,200*200的缩略图大小
    add_image_size( 'homepage-thumb', 220, 180); //预置一个名为’homepage-thumb’,220*180的缩略图大小
}

在首页调用
the_post_thumbnail(‘homepage-thumb’); //显示220*180的缩略图
在分类页面调用
the_post_thumbnail(‘category-thumb’); //显示200*180的缩略图

the_post_thumbnail 函数输出的 html 结构

<img width="150" height="150" src="" class="attachment-thumbnail wp-post-image" alt="" title="screenshot" />

由此可以看出,我们可以用 css 定义类 attachment-thumbnail 的样式就可以了。但是如果我想分别为首页和分类页面定义不同的样式,该怎么做呢?可以给缩略图添加一个属性,如

the_post_thumbnail(‘thumbnail’,array(‘class’ => ‘homepage-thumb’));
输出的html结构为
<img width="150" height="150" src=""
class="homepage-thumb wp-post-image" alt="" title="screenshot" />

add_theme_page()函数

add_theme_page()函数会在后台“外观”菜单项下面新建一个菜单项,有助于我们自己修改主题时功能的扩展。

语法结构 add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $function);

参数

page_titile title标签的内容
menu_title 显示在后台左边菜单的标题
capability 访问这个页面需要的权限
menu_slug 别名,需要独一无二哦自己命名
function 执行的函数
function register_theme_submenu(){
    add_theme_page('Theme Submenu','macka主题设置','administrator','ahu_slug','theme_submenu');
}
function theme_submenu(){
    echo 'lol';
}
add_action('admin_menu','register_theme_submenu');

add_submenu_page()函数

add_submenu_page()函数是往后台的顶级菜单添加子菜单。

语法结构 add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function );

参数

parent_slug-父级菜单项的别名

page_title–页面的title信息

menu_title-菜单标题

capability-权限

menu_slug-别名

function-执行的函数

WordPress 内置菜单的几种情况

1、在仪表盘添加子菜单: add_submenu_page( 'index.php', … );
2、在文章处添加子菜单: add_submenu_page( 'edit.php', … );

3、在媒体处添加子菜单: add_submenu_page( 'upload.php', … );

4、在链接处添加子菜单: add_submenu_page( 'link-manager.php', … );

5、在页面处添加子菜单: add_submenu_page( 'edit.php?post_type=page', … );

6、在评论处添加子菜单: add_submenu_page( 'edit-comments.php', … );

7、在你自定义文章类型处添加子菜单: add_submenu_page('edit.php?post_type=your_post_type',…)

8、在外观处添加子菜单: add_submenu_page( 'themes.php', … );

9、在插件处添加子菜单: add_submenu_page( 'plugins.php', … );

10、在用户处添加子菜单: add_submenu_page( 'users.php', … );

11、在工具处添加子菜单: add_submenu_page( 'tools.php', … );

12、在设置处添加子菜单: add_submenu_page( 'options-general.php', … );

add_menu_page()函数

add_menu_page()函数是往后台添加顶级菜单,也就是和“外观”、“插件”等一样的顶级菜单。

语法结构

<?php
add_menu_page(
    $page_title,
    $menu_title,
    $capability,
    $menu_slug,
    $function,
    $icon_url,
    $position );
?>

参数

page_title 页面title标签信息

$menu_title 菜单标题

capability 权限

menu_slug 别名自己命名

function 执行函数

icon_url 菜单图标url地址

position 此菜单项在菜单中的位置,警告:如果两个菜单项的位置属性相同,其中一个可能要被覆盖

对于 function 参数,这个参数一般是函数名,如果在类中,要调用类的方法,使用 array(类名,函数名)这样的形式调用。如果这个参数为空的话,menu_slug 参数可以是一个文件路径。

capability 参数,默认的权限包括如下:

Subscriber 订阅者
Contributor 投稿者
Author 作者
Editor 编辑
Administrator 管理员

position 参数,默认的菜单项位置属性如下:

2 Dashboard 仪表盘
5 Posts 文章
10 Media 媒体
15 Links 链接
20 Pages 页面
25 Comments 评论
60 Appearance 外观
65 Plugins 插件
70 Users 用户
75 Tools 工具
80 Settings 设置
function register_custom_menu_page(){
    add_menu_page(
        '菜单标题',
        '菜单名称',
        'administrator',
        'custompage',
        'custom_menu_page',
        plugins_url('/images/icon.png'),
        6
    );
}
function custom_menu_page(){
    echo "Admin Page Test";
}
add_action('admin_menu', 'register_custom_menu_page');

the_category()函数

the_category()函数的作用是以链接形式显示指定文章 ID 的分类

语法结构 <?php the_category($separator, $parents, $post_id); ?>

参数

$separator 指定间隔符号,常用的有 (?)、(>)、(| )、(-);
$parents 分类显示方式,两个值multiple和single;
$post_id 文章的ID号;
<?php the_category('|'); ?>

<?php the_category( '&gt; ' ); ?>

single_cat_title()函数

该标签显示或返回当前页面的分类目录标题。该标签只能用在 WordPress 主循环(loop)之外。

语法结构 <?php single_cat_title( $prefix, $display ); ?>

参数

$prefix(字符串)(可选)输出时在标题前的文本信息。默认值:None

$display(布尔型)(可选)显示标题(TRUE)或返回标题以便用在PHP中(FALSE)。默认值:TRUE
将当前分类目录标题赋值给变量 $cat_title 以用在PHP中。
<?php $cat_title = single_cat_title("", false); ?>
<?php single_cat_title('当前文章:',TRUE); ?>或<?php single_cat_title('当前文章:'); ?>的调用形式,显示如下的结果:
只在category.php模板中才能正确调用
当前文章:分类名称

get_cat_ID()函数

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

语法结构 <?php get_cat_ID( $cat_name ); ?>

参数

$cat_name(字符)(可选)默认值为”General”,可以是任何类别名称。默认值:’General’

get_category_parents()函数

get_category_parents()函数使用分隔符输出当前文章的分类名称

语法结构 get_category_parents(int id, bool $link = false, string $separator = '/', bool $nicename = false)

参数

id (int)(必填) 类别ID

$link(bool)(可选) 是否使用链接格式 默认值:false,没有链接,true会显示当前链接

$separator (字符串) (可选) 分隔符 默认值: ‘/’

$ nicename(bool) (可选) 是否使用别名进行显示。默认值:false
$cat_title = single_cat_title('', false);
$cat_id = get_cat_ID( $cat_title );
echo '&gt;'. get_category_parents( $cat_id, true, ' &gt; ');

这个函数可以用来做分类页面的面包屑导航

get_the_category()函数

get_the_category() 函数是用来获取当前文档所属分类属性的函数,这里是当前分类,wordpress 后台分类都有自己的别名,描述之类的,而我们要获取的就是这些信息,当然这些信息不是单独来获取的,而是在当前文档中进行获取的,比如一篇日志,这篇日志是属性哪个分类的,而这个分类的属性又是什么,大概就是这样的吧。

get_the_category() 函数用来返回的值是一个数组形式的对象,返回的内容是文章下分类信息,可以在文章主循环外使用(Loop)

语法结构 <?php $category = get_the_category($id); ?>

参数

$id(可选)文章的ID编号,默认值为$post->ID (当前文章的ID编号)。

返回值

cat_ID
分类ID编号 (也可以保存为 ‘term_id’)
cat_name
类别名称 (也可以保存为 ‘name’)
category_nicename
类分类名称产生的一个slug (也可以保存为’slug’)
category_描述
分类描述 (也保存为’description’)
category_parent
当前分类的父类别的ID编号。’0′ 表示没有父类别。(同样也可以保存为 ‘parent’)
category_count
该分类有多少文章 (也可以保存为 ‘count’)

显示第一个分类名称

<?php
$category = get_the_category();
echo $category[0]->cat_name;
?>

显示多个分类名称(当一个篇文章有多个分类的时候)

<?php
$cat = get_the_category();
foreach($cat as $key=>$category){
echo $category->cat_name.'<br/>’;
}
?>

显示分类的所有内容

<?php
$categories = get_the_category();
var_dump($categories);
?>//显示的内容就是上面提到的返回值

通过上面的方法我们就可以在文章的循环外获取分类的内容,这样我们就可以用在很多的功能中,比如可以在每篇文章下面添加一个相关文章列表

get_category_link()函数的作用是获取分类的连接地址。

语法结构 <?php get_category_link( $category_id ) ?>

参数 $category_id(整数)(必需)类别编号,默认值:None

<?php
// 得到分类的id
$category_id = get_cat_ID( 'Category Name' );

// 得到分类的URI
$category_link = get_category_link( $category_id );
?>

//输出连接
<a href="<?php echo $category_link; ?>" title="Category Name">Category Name</a>

在 wordpress 中 get 开头的函数总是返回值,以便用户自行处理返回结果

get_categories()函数

get_categories()函数可以获得分类所有信息,返回与查询参数相匹配的类别对象数组。变量与 wp_list_categories()函数基本一致,且变量可被作为数组传递,也可在查询句法中被传递。

语法结构 <?php $categories = get_categories( $args ); ?>

<?php
$args = array(
    'type'  => 'post',
    'child_of' => 0,
    'parent'  => '',
    'orderby'  => 'name',
    'order' => 'ASC',
    'hide_empty'  => 1,
    'hierarchical' => 1,
    'exclude' => '',
    'include' => '',
    'number'  => '',
    'taxonomy' => 'category',
    'pad_counts'  => false );
?>

参数

type(字符) post
child_of(整数)仅显示标注了编号的分类的子类。该参数无默认值。使用该参数时应将hide_empty参数设为false
parent(整数)只显示某个父级分类以及下面的子分类(注:子分类只显示一个层级)。
orderby(字符)将分类按字母顺序或独有分类编号进行排序。默认为按分类 编号排序包括ID(默认)和Name
order(字符)为类别排序(升序或降序)。默认升序。可能的值包括asc(默认)和desc
hide_empty(布尔值)触发显示没有文章的分类。默认值为true(隐藏空类别)。有效的值包括:1(true)和0(false)。
hierarchical(布尔值)将子类作为内部列表项目(父列表项下)的层级关系。默认为true(显示父列表项下的子类)。有效值包括1 (true)和0(false)
exclude(字符)除去分类列表中一个或多个分类,多个可以用逗号分开,用分类ID号表示。
include(字符)只包含指定分类ID编号的分类。多个可以用逗号分开,用分类ID号表示。
pad_counts(布尔值)通过子类中的项来计算链接或文章。有效值包括1(true)和0(false),0为默认。
number(字符)将要返回的类别数量。
taxonomy(字符))返回一个分类法,这个是wordpress3.0版本后新添加的一个参数。返回的值包括category(默认)和taxonomy(一些新定义的分类名称)。

不使用 wordpress 默认的 wp_list_categories()分类列表来实现分类列表,而使用 get_categories 自定义分类列表,而且还能在分类列表中加上图标。

<?php
$args=array(
    'orderby' => 'name',
    'order' => 'aSC'
);
$categories = get_categories($args);
foreach($categories as $category) {
    echo ' <li class="cat-'. $category-> slug .'">';
    echo ' <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.' </a>';
    echo ' </li>';
}
?>
输出html代码:
<li class="cat-photo"><a href="#">Photo</a></li>
<li class="cat-design"><a href="#">Design</a></li>

wp_list_categories()函数

wp_list_categories 函数是 WordPress 中用来罗列系统中分类的函数,该函数拥有许多控制输出的参数。

语法结构

<?php
wp_list_categories( $args );
$args = array(
    'show_option_all' => '', //不列出分类链接
    'orderby' => 'name', //按照分类名排序
    'order' => 'ASC', //升序排列
    'show_last_update' => 0, //不显示分类中日志的最新时间戳
    'style' => 'list', //列表显示分类
    'show_count' => 0, //不显示分类日志数量
    'hide_empty' => 1, //不显示没有日志的分类
    'use_desc_for_title' => 1, //显示分类描述
    'child_of' => 0, //不限制子分类
    'feed' => '', //不显示feed
    'feed_image' => '', //不显示feed图片
    'exclude' => '', //不显示该分类
    'hierarchical' => true, //分层次显示父/子分类
    'title_li' => __('Categories'), //用“Categories”为当前分类列表的标题
    'echo' => 1, //显示(echos) 分类
    'depth' => 0 //不限制列表深度
    'walker' => null//用于显示的类(很复杂的概念
);
?>

参数

show_option_all(字符串)非空值会导致如果样式设置为列表显示所有类别的链接。默认值是不显示链接到所有分类。

orderby (字符串)以分类名称、分类ID或文章数量等为排列依据。有效值:

ID
name – 默认
slug
count
term_group
order (字符串)分类的排序顺序(升序或降序)。缺省为升序。有效值:

ASC – 升序(默认)
DESC – 降序
style(字符串)分类列表显示的样式。将分类列表的方式显示(使用<br >标签分隔列表项)。默认设置为列表(无序列表)。有效值:

list – 默认
none
show_count(布尔)显示文章数量。默认情况下不显示文章数量。有效值:

1 (True)
0 (False) – 默认
hide_empty(布尔)隐藏没有文章的分类。  默认情况下隐藏没有文章的分类。有效值:

1 (True) – 默认
0 (False)
use_desc_for_title(布尔)是否将分类描述作为分类链接中的 title 属性,默认为 true。有效值:

1 (True) – 默认
0 (False)
child_of(整数)只显示此参数确定的分类的子分类。此参数没有默认值。

feed (字符串)显示每个分类的 RSS-2 Feed链接到设置的feed文字。默认不显示feed文字和链接。

feed_type(字符串)

feed_image(字符串)设置一个图片到分类的 RSS-2 Feed链接。这个参数会覆盖上面的 feed 参数。此参数没有默认值。

exclude (字符串)排除一个或多个分类。使用逗号分隔每个分类的ID。参数 include 必须为空。

exclude_tree(字符串)排除分类树。使用逗号分隔每个分类的ID。参数 include 必须为空。如果 hierarchical 参数 为 true ,请使用 exclude 参数替代 exclude_tree 。

include (字符串)只显示特定的分类,使用逗号分隔每个分类的ID。

hierarchical(布尔)以层级来显示分类的子分类。默认为 true(在分类的下面显示它们的子分类)。有效值:

1 (True) – 默认
0 (False)
title_li(字符串)设置列表的标题。默认为“Categories”。如果存在这个参数,但是值为空,将无法显示列表。

number(整数)设置显示的分类数量。定义SQL的限制值。默认为不限制。

echo(布尔) 显示结果或保存在一个变量里。默认为 True 。有效值:

1 (True) – 默认
0 (False)
depth (整数)显示分类的深度(即显示多少层的子分类)。默认值为 0(显示所有分类和子分类)。有效值:

0 – 所有分类和子分类(默认)
-1 – 所有类别显示在平面(不缩进)的形式(覆盖hierarchical)。
1 – 只显示顶级分类
n – 根据n的具体数字来显示对应等级的分类。
current_category(整数)后跟分类ID号,对此ID分类加入名为current-cat的CSS控制,用户自定义current-cat样式后,可用于突出显示。

pad_counts(布尔)计算包括子分类的链接或文章数。如果 show_counts 和 hierarchical 为  true ,这个参数就自动设置为  true 。有效值:

1 (true)
0 (false) – 默认
taxonomy (字符串)要返回的分类法。该参数是在 3.0 中添加的。有效值:

category – 默认
taxonomy – 或任何其他已注册的分类法
walker (对象)生成列表 Walker 类。有效值:object – an instance of a class that extends either Walker_Category or Walker

包含或排除分类 按字母顺序排序分类,只包括类别 ID 为 16,3,9 和 5 的分类,你可以使用下面的代码:

<ul>
<?php wp_list_categories('orderby=name&include=3,5,9,16'); ?>
</ul>

根据名称排列,显示文章数,并且排除 ID 为 10 的分类:

<ul>
<?php wp_list_categories('orderby=name&show_count=1&exclude=10'); ?>
</ul>

显示或隐藏列表的标题 title_li 参数可以设置或隐藏 wp_list_categories 函数生成的列表的标题。默认标题为“分类(Categories)” 。如果设置为空值,就不会显示标题。排除 ID 为 4 和 7 的分类,同时隐藏标题:

<ul>
<?php wp_list_categories('exclude=4,7&title_li='); ?>
</ul>

显示或隐藏列表的标题 title_li 参数可以设置或隐藏 wp_list_categories 函数生成的列表 的标题。默认标题为“分类(Categories)” 。如果设置为空值,就不会显示标题。排除 ID 为 4 和 7 的分类,同时隐藏标题:

<ul>
<?php wp_list_categories('exclude=4,7&title_li='); ?>
</ul>

只显示 ID 为 5、9 和 23 的分类,并且列表的标题改为 Poetry ,而且使用 <h2> 标签包含:

<ul>
<?php wp_list_categories('include=5,9,23&title_li=<h2>' . __('Poetry') . '</h2>' ); ?>
</ul>

只显示指定分类的子分类 显示 ID 为 8 的分类的子分类,根据 ID 排序,显示文章数,并且将分类描述作为连接的 title 属性。注意:如果父分类没有文章,将不显示父分类。

<ul>
<?php wp_list_categories('orderby=id&show_count=1&use_desc_for_title=0&child_of=8'); ?>
</ul>

移除分类计数的括号 当 show_count=1 ,每个分类的后面都将显示文章数,同时使用括号包含。如果你要移除括号,可以使用下面的代码

<?php
$variable = wp_list_categories('echo=0&show_count=1&title_li=<h2>Categories</h2>');
$variable = preg_replace('~\((\d+)\)(?=\s*+<)~', '$1', $variable);
echo $variable;
?>

显示分类和 RSS Feed 连接

根据分类名称进行排序,显示文章数量,并且显示每个分类的 RSS 订阅链接:

<ul>
<?php wp_list_categories('orderby=name&show_count=1&feed=RSS'); ?>
</ul>

使用 Feed 图标替换文本,可以使用下面的代码:

<ul>
<?php wp_list_categories('orderby=name&show_count=1&feed_image=/images/rss.gif'); ?>
</ul>

wp_reset_query()函数

开发 wordpress 主题经常会用到的 wp_reset_query()函数,该函数使用在循环 loop 中,其作用是重置查询数据,一般与 query_posts()配对出现,wprdpress 强大的 query_posts()函数设置 loop 的调用条件时,在语句结束必须使用 wp_reset_query()函数清除查询数据,否则可能对该页面另外的数据调用结果产生影响,如无法正常调用,调用出错等;很多新手制作 wordpress 主题时,往往因为没有添加 wp_reset_query()而出现各种问题。

<?php
$args = array(
    // query_posts参数,具体参数可以参加官方文档
    'cat' => 1,
    'category_name' => 'wpfunc'
);
$args = array_merge($args, $wp_query->query); //这一行代码是必须的,不然不能分页
query_posts($args);
if( have_posts() ){
    while( have_posts() ){
        //获取下一篇文章的信息,并且将信息存入全局变量 $post 中
        the_post();
        }
}
wp_reset_query();
?>

query_posts()函数

制作 wordpress 主题的时候经常会用到 query_posts()函数,通过它可以实现各种特殊的要求,如获得特定的文章日志、排除某一分类等即 query_posts() 函数可以用来控制在主循环(Loop)中显示特定的日志。可能很多人对主循环不太理解,那么就举个栗子吧:

首页、存档页的这些文章都是在主循环中的。在不使用 query_posts()函数控制的情况,首页、存档页等都是按照文章的发布时间列出你博客上所有已发布的文章,而如果你想控制哪些文章可以显示,哪些文章不显示,文章按照什么样的方法排序等,那么你就要用到 query_posts()函数了。

使用此函数要做的就是在 index.php 或者其他模板文件中查找 if (have_posts())或 while (have_posts()),在前面添加 query_posts 函数即可。不过以上方式可能会导致首页无法分页,可以将 query_posts 函数改成这样的行式,详细代码如下

<?php
$args = array(
    'cat' => 1,
    'category_name' => 'wpfunc'
);
$args = array_merge($args, $wp_query->query); //这一行代码是必须的,不然不能分页
query_posts($args);
if( have_posts() ){
    while( have_posts() ){
        //获取下一篇文章的信息,并且将信息存入全局变量 $post 中
        the_post();
        }
}?>

语法结构

<?php query_posts(‘cat=4′); ?> //只设置一个循环条件,显示类别ID为4的文章
<?php query_posts(array(
    'cat' => 1,
    'category_name' => wpfunc
    )
);
?>
//设置多个循环条件

参数

cat:根据ID显示类别,多个分类用英文逗号隔开,ID前加负号’-‘表示排除该分类

category_name:根据别名显示类别,输出属于某个类别名的文章

tag:显示与某个标签相关的文章,输出某个标签的文章

posts_per_page:显示的文章数目,-1这个值,会显示所有的文章

author_name:根据作者显示文章数目

showposts:显示的文章数量

order:按时间顺序显示文章,包括ASC 和DESC(默认)

post_type:根据文章形式来显示文章

cat

用法:<?php query_posts(‘cat=4′); ?>

category_name

用法:<?php query_posts(‘category_name=wpfunc’); ?>

tag

用法:<?php query_posts(‘tag=wordpress’); ?>

获得拥有任何这样的标签的文章(可以是拥有一个标签也可以是多个标签同时拥有)

<?php query_posts(‘tag=wordpress,php’); ?>

获取拥有这三个标签的文章

<?php query_posts(‘tag=wordpress+php+mysql’);  ?>

posts_per_page

<?php query_posts(‘posts_per_page=10’);  ?>

author_name

<?php query_posts(‘author_name=许小珂’);  ?>

orderby

orderby=author
orderby=date
orderby=category
orderby=title
orderby=modified
orderby=modified
orderby=menu_order
orderby=parent
orderby=ID

showposts

<?php query_posts(‘showposts=5’);  ?>

使用该函数后,要以 wp_reset_query()函数结束,wp_reset_query()函数详情请看 wp_reset_query 函数

wp_nav_menu() 函数是 WordPress 3.0 以后添加的一个自定义导航菜单调用函数,可用来调用 register_nav_menus() 函数 注册的菜单。

语法结构

<php wp_nav_menu(array $args = array()) ?> //实现前端调用WordPress后台添加的菜单

参数

$args所调用菜单名称及HTML结构等

<?php has_nav_menu('$location') ?>
//判断是否有此菜单,其主要用途是通过该方法,实现后台的生成菜单调用。
默认版

<?php wp_nav_menu(); ?> 通过默认版设置导航菜单,则后台添加的菜单会自动生成顶部菜单,通过此方法生成的菜单的结构如下:

<div class="menu-menu-container">
    <ul id="menu-menu" class="menu">
        <li id="menu-item-49" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-49">
            <a href="link">菜单名称</a>
        </li>
        <li id="menu-item-50" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-49">
            <a href="link">菜单名称</a>
        </li>
    </ul>
</div>

获取的菜单名称为 nav,只列出一级菜单,样式名为 navcontainer

<?php wp_nav_menu(array(
    'menu' => 'header_menu',
    'depth' => 1,
    'menu_class'=>'navcontainer'
    )
); ?>

完整版参数

<?php wp_nav_menu( array(
    'theme_location'  => '',
    'menu'            => '',
    'container'       => 'div',
    'container_class' => '',
    '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',
    'depth'           => 0,
    'walker'          => ''
    )
);?>
theme_location      导航别名,register_nav_menu( ‘header-menu’, ‘顶部导航’ ); header-menu即为导航别名
menu                后台设置的菜单的名称
container           最外层容器标签名字如div标签 nav标签,如果为 false 时去除div标签
container_id        最外层容器id名
container_class     最外层容器class名
menu_class  ul      标签class值
menu_id             ul标签id值
before              显示在导航a标签之前(测试无效果)
after               显示在导航a标签之后(测试无效果)
link_before         每个菜单链接文本前的文本如<a>(link_before对应的字段)网站首页</a>
link_after          每个菜单链接文本后的文本如<a>网站首页(link_before对应的字段)</a>
depth               菜单深度 0代表多级菜单,1代表一级菜单
walker              调用一个对象定义显示导航菜单
items_wrap          使用字符串替换修改ul的class(测试无效果)

根据是否登录生成不同该菜单栏

<?php
if (is_user_logged_in()) {
    wp_nav_menu(array( 'theme_location' => 'logged-in-menu'));
} else {
    wp_nav_menu(array('theme_location' => 'logged-out-menu'));
} ?>

register_nav_menus()函数

导航菜单是每一个 WordPress 主题必须的元素,如果你要制作一个 WordPress 主题,那就必须熟悉 WordPress 导航菜单注册函数 register_nav_menus() 和 导航菜单调用函数 wp_nav_menu()函数 ,这两个函数一般都是配合使用的.

语法结构 <?php register_nav_menu($location, $description); ?> //开启导航菜单功能,注册单个菜单

参数

$location 导航菜单的位置
$description 导航菜单的描述
<?php register_nav_menu( 'header-menu', 'Main Navigation' ); ?>

如果是多个菜单的话则使用 register_nav_menus()函数

语法结构 <?php register_nav_menus($locations); ?> //开启多个导航菜单功能

参数 $locations是一个由多个菜单组成的数组

<?php
register_nav_menus(
    array(
        'header_menu' => 'Main Navigation',
        'footer_menu' => 'Footer Navigation'
    )
);
?>

上面的实例可以放置在 functions.php 文件中直接使用,也可以如下利用钩子进行使用,两种方式皆可。

function register_my_menus() {
  register_nav_menus(
    array(
      'header-menu' => 'Main Navigation',
      'footer-menu' =>'Footer Navigation'
    )
  );
}
add_action( 'init', 'register_my_menus' );

效果展示(顶部导航对应 Main Navigation,底部导航对应 Footer Navigation) Navigation

菜单功能开启之后,下面就利用 wp_nav_menu()函数来实现前台调用菜单吧。

delete_option()函数

delete_option()函数是从wp_options据库表中删除命名选项/值的方法。

语法结构 <?php delete_option( $option ); ?>

参数 $option(字符串)(必填)要删除的选项的名称。默认值:none

从MySQL数据库中的wp_options数据表中删除“my_option”字段。

<?php delete_option('my_option'); ?>

wp_editor()函数

wp_editor()函数用来在page或post页面将一个textarea渲染成TinyMCE编辑器。

语法结构 <?php wp_editor( $content, $editor_id, $settings = array() ); ?>

参数

$content (string) (required) 编辑器内的内容 Default: None
$editor_id (string) (required) HTML id 属性值(注意只能保护小写) Default: None
$settings(array) (optional) 一段数组参数 Default: array(),参数如下

wpautop:是否开启wpautop,默认为true,
media_buttons:是否显示插入/上传多媒体的按钮,默认为true,
textarea_name:编辑器的name属性,默认为$editor_id(可以保护[]),
textarea_rows:编辑器的显示行数,默认为get_option(‘default_post_edit_rows’, 10)(改段代码是获得后台的设置项),
tabindex:键盘tab键的切换顺序,
editor_css:编辑器的样式,适用于visual 和html,必须包含<style>,
editor_class:编辑器的class属性,
teeny:是否开启精简模式,默认为false,
dfw:是否将默认全屏编辑器替换为dfw(需要特殊的dom元素和css),默认为false,
tinymce:加载tinymce,可用数组向tinymce传输参数,默认为true,
quicktags:加载Quicktags,即HTML模式下的那些按钮,可以用数组形式直接向Quicktags传递参数。
<?php wp_editor( '', 'myeditor', array(
            'media_buttons' => false,
            'tinymce' => array( 'plugins' => '',
                        'skin' => 'o2k7',
                        'theme_advanced_buttons1' => 'undo,redo,|,bold,italic,underline,strikethrough|,justifyleft,justifycenter,justifyright,justifyfull,|,forecolor,backcolor',
                        'theme_advanced_buttons2' => 'cut,copy,paste,|,bullist,numlist,blockquote,|,link,unlink,anchor,image,|,sub,sup,hr'
                     )
            )
      );
?>

add_option()函数

add_option()函数是一种向wp_options数据表中添加有名称的选项/值方法。如果所需选项已存在,add_option()函数不添加内容。选项被保存后,可通过get_option()来获取选项,通过update_option()来修改选项,还可以通过delete_option()删除该选项。

语法结构 <?php add_option( $option, $value, $deprecated, $autoload ); ?>

参数

$name(字符串)(必需)需要添加的选项名称。必须用小写字母并且用_隔开单词,参数值会被存入数据库,默认值:None

$value(字符串)(可选)当前选项名称的值。限制在2到32个字节内,默认值:Empty

$deprecated(字符串)(可选)不推荐使用,默认值:Empty

$autoload(字符串)(可选)当前选项是否需要被wp_load_alloptions函数自动加载(加载每个页面时将选项放在对象缓存中)?有效值:yes或no。

比如说add_option(‘xk_des’,’xuxiaoke’)就是添加一个记录,其中option_name为xk_des,option_value为xuxiaoke,添加后,你可以用get_option(‘xk_des’)来获取该option_value也就是xuxiaoke。

其实,在实际应用中,update_option()也同样起到add_option()函数的添加作用。所以,一般情况下,可以用update_option()函数来替代add_option()函数。

get_option()函数

get_option()函数,实际上我们在整合后台功能的时候经常会用到的一个函数,主要用来从 WordPress 博客数据库wp_options表中取得我们想要的字段内容的一个函数。

语法结构 <?php echo get_option( $option, $default ); ?>

参数:

$option (string) (必选)获取选项的名称,只允许下划线分隔的小写字母组合,如show或者show_id形式,默认值none。
$default(mixed) (可选)如果不存在并且设置了默认值的话就返回默认值,否则返回默认False

部分配置属性列表(配置属性表大全)

admin_email – 网站的管理员邮件地址
blogname – 网站的站点名称
blogdescription – 网站的站点副标题
blog_charset – 站点的字符编码集
date_format – 默认的时间格式
default_category – 默认的文章分类
template – 当前设置的主题名称
posts_per_page – 单页显示的最大文章数


<?php echo get_option("wpxk", "WordPress"); 
//如果wp_option表中没有wpxk这条记录,就默认返回“WordPress” ?>
//将博客名称显示在<h1>标签中
<h1><?php echo get_option( 'blogname' ); ?></h1>
//显示站点正在使用的编码(比如:UTF-8)
<p>Character set: <?php echo get_option( 'blog_charset' ); ?> </p>
博客管理员的邮件地址,并将它存在变量中。
<?php $admin_email = get_option( 'admin_email' ); ?>

update_option()函数

update_option()函数的功能是更新wp_options表中指定的一条数据。可以使用此函数代替add_option函数,尽管它不够灵活。 update_option函数会检查并判断选项是否已经存在。如果不存在,用add_option (’option_name’, ‘option_value’)添加选项。除非用户需要指定add_option的选项参数,否则update_option()是一个可同时添加和更新选项的两用函数。

语法结构 <?php update_option( $option, $new_value, $autoload); ?>

参数

$option(string) (必须))要更新的选项名,默认值: 无
$new_value(必须),此选项名称的新值。该值可以是整数,字符串,数组或对象。
$autoload(mixed) (可选)是否自动加载 yes/no, 默认: null
<?php 
if(update_option("wpxk", "WordPress函数")){ 
    echo "更新成功"; 
}
?> 
//将wp_options表中选项名为wpxk的值修改为WordPress函数,成功就返回true
<?php
$option_name = 'myhack_extraction_length' ; 
$newvalue = '255' ;
    if ( get_option($option_name) ) {
    update_option($option_name, $newvalue);
}else {
    $deprecated=' ';
    $autoload='no';
    add_option($option_name, $newvalue, $deprecated, $autoload);
}
?>

get_bloginfo()函数

get_bloginfo()函数用来获取博客信息,和bloginfo()函数类似,只是get_bloginfo()函数主要是获得返回值,不直接输出,需要输出时前面加echo

语法结构

<?php get_bloginfo( $show, $filter ); ?> //返回值
<?php echo get_bloginfo( $show, $filter ); ?> //输出返回值

参数

'$show' (字符串string) (可选)你需要输出的信息的关键词。 默认值: name

‘name’:显示在 设置 -> 常规 中设置的“站点标题”。该数据是从 wp_options 这个数据表中检索到的 “blogname”记录。
‘description’:显示在 设置 -> 常规 中设置的“副标题”。该数据是从 wp_options 这个数据表中检索到的 “blogdescription” 记录。
‘admin_email’:显示在 设置 > 常规 中设置的 “电子邮件地址”。该数据是从 wp_options 这个数据表中检索到的 “admin_email”记录。
‘charset’:显示在 设置 > 常规 中设置的“页面和feed的编码”。该数据是从 wp_options 这个数据表中检索到的”blog_charset” 记录。(注:3.5.1+好像已经没有这个选项了)
‘html_type’:显示WordPress HTML 页面中的内容类型(默认: “text/html”)。该数据可以从 wp_options 这个数据表中检索到的 “html_type” 记录。主题和插件可以通过使用 pre_option_html_type 过滤器覆盖默认值。
‘language’:显示WordPress的语言。
‘wpurl’:显示在 设置 > 常规 中设置的 “WordPress 地址 (URL)”。该数据是从 wp_options 这个数据表中检索到的 “siteurl” 记录。 可以考虑使用 site_url() 来代替,尤其是在使用 子目录路径方式,而不是使用 子域名 来配置多站点时(bloginfo将返回根网站的URL,而不是子站点的URL)。
‘url’:显示在 设置 > 常规 中设置的 “站点地址(URL)”。该数据是从 wp_options 这个数据表中检索到的 “home”记录。 可以考虑使用 home_url() 代替。
‘stylesheet_url’:显示当前使用的主题的 CSS文件(通常为 style.css)路径。可以考虑使用 get_stylesheet_uri() 代替。
‘template_url’/’template_directory’:当前主题的 URL 路径 。在子主题中, get_bloginfo(‘template_url’) 和 get_template() 都将返回父主题的目录。可以考虑使用 get_template_directory_uri() (用于父主题目录)或get_stylesheet_directory_uri() (用于子主题目录)代替。
‘stylesheet_directory’:显示当前使用的主题的样式表路径。可以考虑使用 get_stylesheet_directory_uri() 代替。
name = 获得更好的笔记查询体验
description = 又一个WordPress站点
admin_email = admin@example.com
charset = UTF-8
html_type = text/html
language = en-US
wpurl = http://coding.xuxiaoke.com/(获得安装路径)
url = http://coding.xuxiaoke.com/(获得首页地址)
stylesheet_url = http://www.example.com/home/wp/wp-content/themes/bluesky/style.css
stylesheet_directory = http://www.example.com/home/wp/wp-content/themes/bluesky
template_directory = http://www.example.com/home/wp/wp-content/themes/bluesky
template_url = http://www.example.com/home/wp/wp-content/themes/bluesky
text_direction = ltr
version = 3.5
home = http://www.example.com/home (已弃用!使用 url 替代)
siteurl = http://www.example.com/home (已弃用!使用 url 替代)

bloginfo()函数

bloginfo() 直接在浏览器中输出内容,我们创建一个wordpress博客的时候,我们需要填写博客的相关信息,包括博客名称,博客描述,博客地址等等。当我们需要使用这些信息的时候,就可以使用bloginfo()函数来获取wordpress博客的相关信息。 语法结构

<?php bloginfo( $show ); ?>' 参数:

$show (字符串string) (可选)你需要输出的信息的关键词。 默认值: name
‘name’:显示在 设置 -> 常规 中设置的“站点标题”。该数据是从 wp_options 这个数据表中检索到的 “blogname”记录。
‘description’:显示在 设置 -> 常规 中设置的“副标题”。该数据是从 wp_options 这个数据表中检索到的 “blogdescription” 记录。
‘admin_email’:显示在 设置 > 常规 中设置的 “电子邮件地址”。该数据是从 wp_options 这个数据表中检索到的 “admin_email”记录。
‘charset’:显示在 设置 > 常规 中设置的“页面和feed的编码”。该数据是从 wp_options 这个数据表中检索到的”blog_charset” 记录。(注:3.5.1+好像已经没有这个选项了)
‘html_type’:显示WordPress HTML 页面中的内容类型(默认: “text/html”)。该数据可以从 wp_options 这个数据表中检索到的 “html_type” 记录。主题和插件可以通过使用 pre_option_html_type 过滤器覆盖默认值。
‘language’:显示WordPress的语言。
‘wpurl’:显示在 设置 > 常规 中设置的 “WordPress 地址 (URL)”。该数据是从 wp_options 这个数据表中检索到的 “siteurl” 记录。 可以考虑使用 site_url() 来代替,尤其是在使用 子目录路径方式,而不是使用 子域名 来配置多站点时(bloginfo将返回根网站的URL,而不是子站点的URL)。
‘url’:显示在 设置 > 常规 中设置的 “站点地址(URL)”。该数据是从 wp_options 这个数据表中检索到的 “home”记录。 可以考虑使用 home_url() 代替。
‘stylesheet_url’:显示当前使用的主题的 CSS文件(通常为 style.css)路径。可以考虑使用 get_stylesheet_uri() 代替。
‘template_url’/’template_directory’:当前主题的 URL 路径 。在子主题中, get_bloginfo(‘template_url’) 和 get_template() 都将返回父主题的目录。可以考虑使用 get_template_directory_uri() (用于父主题目录)或get_stylesheet_directory_uri() (用于子主题目录)代替。
‘stylesheet_directory’:显示当前使用的主题的样式表路径。可以考虑使用 get_stylesheet_directory_uri() 代替。
name = 获得更好的笔记查询体验
description = 又一个WordPress站点
admin_email = admin@example.com
charset = UTF-8
html_type = text/html
language = en-US
wpurl = http://coding.xuxiaoke.com/(获得安装路径)
url = http://coding.xuxiaoke.com/(获得首页地址)
stylesheet_url = http://www.example.com/home/wp/wp-content/themes/bluesky/style.css
stylesheet_directory = http://www.example.com/home/wp/wp-content/themes/bluesky
template_directory = http://www.example.com/home/wp/wp-content/themes/bluesky
template_url = http://www.example.com/home/wp/wp-content/themes/bluesky
text_direction = ltr
version = 3.5
home = http://www.example.com/home (已弃用!使用 url 替代)
siteurl = http://www.example.com/home (已弃用!使用 url 替代)
src=http___nzzrdt.com_wp-content_uploads_2017_05_IMG_1423.png&refer=http___nzzrdt.jpg
  • Origin

    WordPress