文章中主要介绍wordpress有哪些东西,应该怎么做,更加细化的东西(如函数的用法)请查阅下方官方API手册
开源wordpress主题:Document主题,本文就是在开发这款主题时,记录下来的,可以用于学习过程中的一些对照。
文章转换过程中可能丢失部分注释:查看原文请访问 WordPress主题开发,从入门到精通。-友人a的笔记丶
应用程序接口:https://make.wordpress.org/core/handbook/best-practices/core-apis/
官方开发文档:https://developer.wordpress.org/themes/basics/theme-functions/
主题相关
1.如何为不同分类的页面显示不同的模板。
文章页面默认调用的是single.php,可以在single.php里判断不同的分类,include不同的模板文件。
2.get_template_part
get_template_part( $slug, $name = null,$args = array() ),将模板部件加载到模板中,并传递一个参数。
要将此功能与主题目录中的子文件夹一起使用,只需在 slug 之前添加文件夹名称即可。例如,如果您的主题目录中有一个名为“partials”的文件夹,而该子文件夹中有一个名为“content-page.php”的模板部分,则可以这样使用get_template_part():
<?php get_template_part( 'partials/content', 'page' ); ?>
Hook列表
1.after_setup_theme
在主题初始化后(funtions.php已经执行完毕),每次页面加载期间都会调用此钩子。它通常用于执行主题的基本设置、注册和初始化操作。
2.init
大部分 WP 在这个阶段被加载,并且用户被认证。WP 继续加载随后的“init”钩子(例如小部件),许多插件出于各种原因在其上实例化自己(例如,它们需要用户、分类等)。
3.wp_loaded
彻底加载完毕, WP、所有插件和主题完全加载并实例化,就会触发此钩子。https://developer.wordpress.org/reference/hooks/wp_loaded/
4.admin_init
当管理员页面或脚本正在初始化时触发,当用户访问管理区域时,在任何其他挂钩之前触发。不仅在面向用户的管理屏幕上运行。它也在 admin-ajax.php 和 admin-post.php 上运行。
加载顺序:after_setup_theme –> init –> wp_loaded –> admin_init
5.wp_enqueue_scripts、admin_enqueue_scripts、login_enqueue_scripts
当脚本和样式入队时触发。用于将主页面的脚本和样式排入队列。
6.edit_form_after_title
在WordPress撰写文章页面添加一段提示标语的功能。
7.wp_head、wp_body_open(放在Body之后)、wp_footer
利用钩子函数的输出,在指定标签的位置输出相应的内容;wp_head(),方法内就是一个do_action(“wp-head”)
8.after_switch_theme
主题切换后,第一次加载wp时触发的钩子;check_theme_switched()检查是否已经触发这个钩子
9.save_post
在文章保存后立即触发,remove_all_actions(),移除所有钩子,did_action(),钩子的运行次数
10.admin_menu
在后台加载管理菜单之前触发。
主题可用函数
带s的方法一般是钩子函数的包装器,可以直接传入函数作为钩子;
1.add_theme_support
WordPress 默认隐藏了很多功能,我们可以通过 add_theme_support() 函数启用它们,add_theme_support可以在主题的functions.php中调用,如需在hook中调用的必须在after_theme_setup中调用;
- add_theme_support( ‘post-thumbnails’ ,[array( ‘post’ )]); 启用指定类型文章的缩略图功能,不指定第二个参数时默认为全部文章启用缩略图功能;
- post-formats:文章形式。
- html5:HTML5支持。
- custom-logo:自定义网站Logo图标。
- custom-header-uploads:顶部图像上传。
- custom-header:自定义网站顶部内容。
- custom-background:自定义网站背景内容。
- title-tag:自动生成页面标题信息,需调用。
- customize-selective-refresh-widgets:小部件选择性更新。
- starter-content:内容初始化。
- responsive-embeds:自适应嵌入内容。
- align-wide:配置块编辑器宽对齐。
- dark-editor-style:配置暗风格块编辑器。
- disable-custom-colors:禁用快编辑器自定义颜色。
- disable-custom-font-sizes:禁用快编辑器自定义字体大小。
- editor-color-pallete:配置块编辑器调色板。
- editor-font-sizes:配置块编辑器字体大小。
- editor-styles:配置块编辑器样式。
- wp-block-styles:启用默认块编辑器样式。
2.目录、路径的相关函数
- get_template_directory,获取活动主题所在的目录路径;
- get_template_directory_uri()获取活动主题的完整URL;
- get_stylesheet_uri(),获取活动主题的style.css的完整URL路径;
- get_theme_file_path($file)、get_theme_file_uri($file) 一样 ,这个函数将返回主题中文件的路径(如果存在)。
3.wp_get_theme()
获取当前启用的主题相关说明信息(style.css文件内的主题说明),wp_get_themes(),获取系统内所有的主题信息;
4.样式、脚本加载
只在wp_enqueue_scripts(主页面)、admin_enqueue_scripts(后台)、login_enqueue_scripts(登录页面)钩子内可用;
wp_enqueue_style( string $handle(样式名), string $src = ”(样式文件的目录路径), string[] $deps = array()(依赖的文件), string|bool|null $ver = false(动态版本号), string $media = ‘all’ (支持的媒体类型));按照注册的队列加载css文件。
wp_enqueue_script( string $handle, string $src = '', string[] $deps = array(), string|bool|null $ver = false, bool $in_footer = false )
wp_add_inline_style(),内联样式;
5.删除已注册的样式表、脚本
wp_deregister_style(style)、wp_dequeue_script(script)
6.文章相关函数
这些函数需要在循环中工作,因为它们需要全局 post 对象,WordPress 循环会自动设置这个 post 对象。
- in_the_loop(),是否处于文章循环;
- get_the_ID,获取文章ID;
- the_title,输出文章标题
- the_title_attribute([‘before’=>”前”,’after’=>”后”,’post’=>1]); 指定相关属性输出标题
- get_the_title,获取文章标题
- the_guid,文章的GUID
- get_the_guid,获取文章的GUID
- the_content,文章内容
- get_the_content,获取文章内容
- the_excerpt,文章摘要
- get_the_excerpt,获取文章摘要
- has_excerpt,是否有文章摘要
- post_password_required,是否需要密码
- next_post(),下一篇文章
- previous_post(),前一篇文章
7.缩略图
- has_post_thumbnail,是否拥有缩略图
- get_post_thumbnail_id,获取缩略图ID
- the_post_thumbnail,输出缩略图(img元素)
- update_post_thumbnail_cache
- get_the_post_thumbnail,缩略图(img元素)
- get_the_post_thumbnail_url,缩略图URL
- the_post_thumbnail_url,输出缩略图URL
- get_the_post_thumbnail_caption,缩略图文件标题
- the_post_thumbnail_caption,缩略图文件标题
8.站点信息
页面判断函数需要在指定声明周期之后才会有值,例如function加载的时候是没有的,wp_enqueue_scripts钩子内是有值的。
- bloginfo([$key])、get_bloginfo([$key]);
- is_user_logged_in(),是否已经登录
- is_home(),是否处于首页;
- is_admin(),是否处于后台;
- is_single(),传递空、文章ID、文章标题,判断是否在这个文章页面;
- is_sticky(),传递空、文章ID、文章标题,判断是否是置顶的文章
- is_page(),传递空、文章ID、文章标题,判断是否在这个页面;
- $paged = $wp_query->get( ‘page’ ); 获取分页所处的页数;
- is_page_template(‘about.php’),是否处于某个页面模板;
- is_category(),传递空、分类ID、分类标题,判断是否在某个分类页面;
- is_archive()、is_search()、is_404()
以上所有get都可以单独指定wp_post对象;
9.列表
- 传递一个配置数组获取页面列表:wp_list_pages()
- 传递一个配置数组获取目录列表:wp_list_categories()
- 传递一个配置数组获取评论列表:wp_list_categories()
10.posts表相关操作方法
- wp_update_post(),更新文章
- wp_insert_post(),插入文章
- wp_is_post_revision(),
- wp_trash_post(),删除文章到回收站
- wp_delete_post(),用久删除文章
- wp_publish_post(),发布文章,改为发布状态
11.网络
- wp_send_json_success
- wp_send_json_error
- wp_send_json
- 响应json数据,然后die
11.附件
- wp_get_attachment_thumb_file
- wp_get_attachment_thumb_url
- wp_get_attachment_link
- wp_get_attachment_url
- wp_get_attachment_image_src
12.wp_options表
option可直接存放一个数组;当我们单独访问许多选项数据时,可能导致许多单独的数据库事务,通常,数据库事务是昂贵的操作(就时间和服务器资源而言)而把许多选项作为数组存储和获取时,只会产生一个数据库事务,这是一种比较理想的操作。
- update_option 更新WP设置选项
- delete_option,从 WordPress 选项数据表中安全删除“选项/值”对的方法。
- add_option 添加设置选项
- get_option 获取选项设置值
- add_site_option、get_site_option…
13.wp_posts文章类型
Post、Page、Attachment、Revision、Navigation Menu Items
14.转义
- esc_html() – 在显示 HTML 时,使用此函数。
- esc_url() – 在输出 URL 时,使用此函数,包括在src和href属性中的 URL。
- esc_js() – 对内联 JavaScript 使用此函数。
- esc_attr() – 把数据设置为 HTML 元素属性时使用此能力。
- 相对于使用 echo 输出数据,我们应该更多的使用 WordPress 的本地化能力,如 _e() 或 __()
15.简码
- add_shortcode()
- remove_shortcode()
- shortcode_exists()
- 简码解析器只对简码的内容进行一次传递。
- 可以在处理函数的最终返回值上调用 do_shortcode() ,使 $content 中包含的简码也可以被解析。简码可以接受一些参数,我们称之为简码的属性
16.元数据
- get_post_meta($postID, $count_key, true); //查询元字段数据
- delete_post_meta($postID, $count_key);//删除原字段数据
- add_post_meta($postID, $count_key, ‘0’);//新增元字段数据
17.query_posts函数
query函数用于查询文章,将会修改wordpress主查询的指向:
wp_reset_query用于重置主循环的指针。
<?php
query_posts("showposts=10");
while (have_posts()) {
the_post();
get_the_permalink();
get_the_title();
get_the_title();
}
wp_reset_query();
?>
18.get_posts函数
指定参数查询文章,返回一个wp_Query对象数组,代表所有符合条件的文章:
支持的参数:https://developer.wordpress.org/reference/classes/wp_query/parse_query/
<?php
$args = array(
'numberposts' => 10,
'post_type' => 'book'
);
$latest_books = get_posts( $args );
19.get_query_var函数
get_query_var用于查询公共变量,例如
<?php
$page = get_query_var( 'page', 1 );
20.update_user_meta
update_user_meta用于更新用户信息
update_user_meta( int $user_id, string $meta_key, mixed $meta_value, mixed $prev_value = '' );
- userid,代表需要更新数据的用户ID
- meta_key,代表需要更新的key
- meta_value,更新之后的值
- prev_value,更新前的值,用户区分具有相对用户ID和key的数据,不指定时将更新所有数据
21.站点URL
- plugins_url() — 插件目录的 URL (例如:https://http://www.haoyundada.com/wp-content/plugins)
- includes_url() — includes 目录的 URL (例如:https://http://www.haoyundada.com/wp-includes)
- content_url() — content 目录的 URL (例如:https://http://www.haoyundada.com/wp-content)
- admin_url() — admin 目录的 URL (例如:https://http://www.haoyundada.com/wp-admin/)
- site_url() — 当前网站的 URL (例如:https://http://www.haoyundada.com)
- home_url() — 当前网站首页的 URL (例如:https://http://www.haoyundada.com)
22.获取标签、目录链接
get_tag_link 调用的是get_category_link,get_category_link又调用get_term_link(参数为对象或term_id)
23.获取用户的头像
<?php
get_avatar_url( $adminUserInfo->ID )
WP_Rewrite对象
WP_Rewrite是 WordPress 的类,用于管理重定向规则。官方不建议直接修改该对象的属性,而是通过它的方法进行操作。
API文档:https://codex.wordpress.org/Rewrite_API
自定义编辑器
TinyMCE:https://www.tiny.cloud/docs-4x/api/tinymce/root_tinymce/
1.TinyMCE4.x版本相关方法
- create(s:String, p:Object, root:Object),创建一个类、子类或静态单例,https://www.tiny.cloud/docs-4x/api/tinymce/root_tinymce/#create
s (String) – 类名、继承和前缀。
p (Object) – 添加到类的方法集合。
root (Object) – 可选的根对象默认为全局窗口对象。
- tinymce.PluginManager,获取tintmce.Plugin类,用于管理插件;https://www.tiny.cloud/docs-4x/api/tinymce/tinymce.plugin/
2.添加插件的两种方式;
先create一个类,再通过PluginManager.add添加插件。
- 直接PluginManager.add一个对象,添加插件。
3.tinymce.Editor,编辑器核心API
官方文档:https://www.tiny.cloud/docs-4x/api/tinymce/tinymce.editor
- selection,代表编辑器内被选中的内容的对象;https://www.tiny.cloud/docs-4x/api/tinymce.dom/tinymce.dom.selection/
- getContent(),获取被选中对象的内容;
- setContent(),设置被选中对象的内容
- windowManager,可打开一个新的窗口或者对话框;https://www.tiny.cloud/docs-4x/api/tinymce/tinymce.windowmanager/
4.wp注册tinymce插件、样式、按钮
<?php
add_action( 'admin_init', 'my_tinymce_button' );
function my_tinymce_button() {
if ( current_user_can( 'edit_posts' ) && current_user_can( 'edit_pages' ) ) {
add_filter( 'mce_buttons', 'my_register_tinymce_button' );
add_filter( 'mce_external_plugins', 'my_add_tinymce_button' );
}
}
function my_register_tinymce_button( $buttons ) {
array_push( $buttons, "button_eek", "button_green" );
return $buttons;
}
function my_add_tinymce_button( $plugin_array ) {
$plugin_array['my_button_script'] = plugins_url( '/mybuttons.js', __FILE__ );
return $plugin_array;
}
add_filter( 'mce_css', 'pure_highlightjs_mce_css' );
function pure_highlightjs_mce_css( $mce_css ) {
if ( ! is_array( $mce_css ) ) {
$mce_css = explode( ',', $mce_css );
}
$mce_css[] = PURE_HIGHLIGHTJS_PLUGIN_URL . 'tinymce/tinymce.css';
return implode( ',', $mce_css );
}
5.新增短标签
function nrtitle($atts, $content = null, $code = "")
{
static $times=1;
$return = '<h2 id="list'.$times.'">';
$return .= $content;
$return .= '</h2>';
$times++;
return $return;
}
add_shortcode('title', 'nrtitle');
技巧
1.文章是否有缩略图
<?php
if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
2.注册加载样式文件,并根据修改时间自动修正版本号
wp_enqueue_style('main-styles', get_template_directory_uri() . '/css/style.css', array(), filemtime(get_template_directory() . '/css/style.css'), false);
wp_enqueue_script('prism', $url . '/common/prism/prism.js', array(), filemtime($root . '/common/prism/prism.js'), false);
3.获取wordpress注册的所有action和filter钩子
<?php
global $wp_filter;
print_r($wp_filter);
4.去除头部无用代码
function initialize(){
remove_action('wp_enqueue_scripts', 'wp_enqueue_global_styles');
remove_action('wp_footer', 'wp_enqueue_global_styles', 1);
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'rest_output_link_wp_head', 10);
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_head', 'rel_canonical');
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_styles', 'print_emoji_styles');
remove_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
add_filter('wp_resource_hints',
function ($hints, $relation_type) {
if ('dns-prefetch' === $relation_type) {
return array_diff(wp_dependencies_unique_hosts(), $hints);
}
return $hints;
}, 10, 2);
}
add_action('after_setup_theme', 'initialize');
5.禁用区块编辑器
add_filter('use_block_editor_for_post', '__return_false');
remove_action( 'wp_enqueue_scripts', 'wp_common_block_scripts_and_styles' );
6.切换经典小工具编辑器
//禁止新版小工具
add_filter( 'gutenberg_use_widgets_block_editor', '__return_false' );
add_filter( 'use_widgets_block_editor', '__return_false');
7.添加后台编辑器按钮
editor.addButton('PureHighlightjsInsert', {
title : PureHighlightjsTrans.title,
icon: 'wp_code',
onclick: function() {
editor.windowManager.open({
title : PureHighlightjsTrans.title,
minWidth : 700,
body : [
{
type : 'listbox',
name : 'lang',
label : PureHighlightjsTrans.language,
values : languageValues
},
{
type : 'textbox',
name : 'code',
label : PureHighlightjsTrans.code,
multiline : true,
minHeight : 200
}
],
onsubmit : function(e){
var code = e.data.code.replace(/\r\n/gmi, '\n'),
tag = 'code';
code = tinymce.html.Entities.encodeAllRaw(code);
var sp = (e.data.addspaces ? ' ' : '');
editor.insertContent(sp + '<pre class="pure-highlightjs"><code class="' + e.data.lang + '">' + code + '\n</code></pre>' + sp + '<p></p>');
}
});
}
});
8.注册插件
tinymce.create('tinymce.plugins.info', {
init : function(ed, url) {
ed.addButton('info', {
title : '蓝色背景栏',
image : url+'/images/info.png',
onclick : function() {
ed.selection.setContent('[info]' + ed.selection.getContent() + '[/info]');
}
});
},
createControl : function(n, cm) {
return null;
},
});
tinymce.PluginManager.add('info', tinymce.plugins.info);
9.wp版本比较
if ( version_compare( $GLOBALS['wp_version'], '5.3', '<' ) ) {}
10.去除后台底部版权和文字提示
function remove_footer( $text ) {
$text = '';
return $text;
}
add_filter('update_footer', 'remove_footer', 11);
add_filter('admin_footer_text', 'remove_footer', 11);
11.更换Gavatar镜像
function replace_https_avatar( $avatar ) {
$Image = get_option( 'document_Gravatar' );
$avatar = str_replace( array(
'secure.gravatar.com/avatar',
"www.gravatar.com/avatar",
"0.gravatar.com/avatar",
"1.gravatar.com/avatar",
"2.gravatar.com/avatar"
), $Image, $avatar );
$avatar = str_replace( "http://", "https://", $avatar );
return $avatar;
}
add_filter('get_avatar', 'replace_https_avatar');
add_filter('get_avatar_url', 'replace_https_avatar');
12.修改文章摘要字数
function article_excerpt_lengths( $length ) {
return 300;
}
add_filter( 'excerpt_length', 'article_excerpt_lengths', 999 );
13.添加页面模板
function add_page_template( $page_templates ) {
$page_templates['template/page/posts.php']='文章聚合';
return $page_templates;
}
add_filter( 'theme_page_templates', 'add_page_template' );
add_filter( 'theme_post_templates', 'add_page_template' );
14.修改页面的固定链接
add_action( 'init', 'custom_page_rules' );
function custom_page_rules() {
global $wp_rewrite;
$wp_rewrite->page_structure = $wp_rewrite->root . '%pagename%.html';
}
15.输出文章分页
官方文档:https://developer.wordpress.org/reference/functions/get_the_posts_pagination/
<?php
$pagination = get_the_posts_pagination( array(
'prev_next' => false,
'current' => max( 1, get_query_var( 'paged' ) ),
'type' => 'list'
) );
$pagination=preg_replace( '/^[\s\S]*?(\<ul[\s\S]*\>[\s\S]*\<\/ul\>)[\s\S]*?$/', "$1", $pagination );
16.输出评论分页
<?php if(get_comment_pages_count()>1){ ?>
<div class="pagination">
<?php paginate_comments_links( ['prev_next' => false]); ?>
</div>
<?php } ?>
17.用户是否登录
<?php
$isLogin = is_user_logged_in();
$Info = wp_get_current_user();
模板循环
1.基本用法
<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();
endwhile;
endif;
?>
注册主题菜单
- register_nav_menu(),注册单个自定义的主题页面菜单
- register_nav_menus(),注册多个自定义的主题页面菜单
- unregister_nav_menu(),删除菜单注册
- wp_nav_menu($args);给定一个theme_location参数,该函数显示分配给该位置的菜单。如果不存在这样的位置或没有为其分配菜单,则参数fallback_cb将确定显示的内容。如果没有给定theme_location参数,函数显示与menu参数给出的 ID、slug 或名称匹配的菜单;否则,第一个非空菜单;否则(或者如果 menu 给定的菜单为空),则输出fallback_cb参数给定的函数(默认为wp_page_menu());否则什么都没有。
- has_nav_menu(),判断某个注册的菜单是否已经被分配菜单
后台添加菜单、主题设置
1.添加菜单和页面
- add_menu_page($page_title , $menu_title $capability , $menu_slug , $callback ‘ , $icon_url ‘ , $position ),$menu_slug 为分节注册可用的page参数;
- add_menu_page、remove_menu_page,注册、删除一个顶级菜单已经相对应的页面;
- add_submenu_page、remove_submenu_page,注册、删除一个子菜单
2.添加设置
register_setting注册的能够通过表单自动更新、add_option只是普通的选项;
- register_setting(‘reading’, ‘wporg_setting_name’,[“type”=>”boolean”,”description”=>”描述”]); 为指定页面注册一个新设置(系统默认的有“general”、“discussion”、“media”、“reading”、“writing”和“options”),可以通过get_option获取register_setting的值;
- add_settings_section($id,$title,$callback,$page) ,在指定的设置页面($page)上添加一个标题为$title、内容为$callback输出的新分节。
- add_settings_field($id,$title,$callback,$page,$section,$args ) ,将指定标题的callback内容的新字段添加指定页面的指定分节上面。
- unregister_setting(),如字面意思;
- settings_fields( string $option_group ),输出register_setting注册的所有输入域;参数为option_group;(声明可以修改的选项)
- do_settings_sections( $page ),打印添加到特定设置页面的所有设置部分(HTML代码)
- submit_button( string $text = null, string $type = ‘primary’, string $name = ‘submit’, bool $wrap = true, array|string $other_attributes = null ),提供一个提交按钮;
- settings_fields()、do_settings_sections()、do_settings_fields() add_settings_error()、get_settings_errors()、settings_errors()
文章密码处理
- post_password_required(),判断文章是否需要输入密码、是否已经输入密码;
- get_the_password_form(),输出密码输入的表单
文章评论
评论相关函数必须运行在comments.php内,其它文件内调用无返回结果;
- have_comments(),判断当前文章是否有评论;
- comments_open(),是否打开了评论功能;
- comment_form(),输出评论的表单;
- wp_list_comments(),输出评论列表;
- the_comments_navigation(),显示上、下一组评论;
- get_comments_number(),获取文章评论数量;
- is_user_logged_in(),当前访客是否登录;
- wp_get_current_user(),获取当前登录的对象,返回 WP_User 对象。
- wp_get_current_commenter(),获取当前评论着的姓名、电子邮件和 URL。
- paginate_comments_links(),评论的分页结构
- get_cancel_comment_reply_link(),获取取消回复的链接
- comment_form_title(),获取当前的评论状态;
- $reply_to_id = isset( $_GET[‘replytocom’] ) ? (int) $_GET[‘replytocom’] : 0;$comment = get_comment( $reply_to_id ); //获取回复的评论;
数据库操作
相关文章:http://www.sins7.cn/wordpress-wpdb-usage/
$wpdb是一个全局变量,包含多个关于数据库查询函数:
<?php
$wpdb -> get_results('query');
$wpdb->query('query');
$wpdb->get_var('query',column_offset,row_offset);
$wpdb->get_row('query', output_type, row_offset);
$wpdb->get_col('query',column_offset);
$wpdb->get_results('query', output_type);
$wpdb->insert( $table, $data, $format );
$wpdb->update( $table, $data, $where, $format = null, $where_format = null );
$wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] );
$wpdb->show_errors();
$wpdb->hide_errors();
$wpdb->print_error();
$wpdb->get_col_info('type', offset);
$wpdb->flush();
瞬态数据
相较于选项,瞬态的区别是可以设置数据到期时间。
- set_transient( $transient, $value, $expiration );
- get_transient(),获取值
- set_site_transient(),多站点时使用。
- get_site_transient()多站点时使用。
- delete_transient(),删除指定值。
- delete_site_transient(),多站点时使用。
内置的时间单位常量:
MINUTE_IN_SECONDS = 60 (seconds)
HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS
DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS
WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS
MONTH_IN_SECONDS = 30 * DAY_IN_SECONDS
YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS
小部件
小部件本质就是一段可直接调用的代码块(分为边栏和挂件)。
官方文档:https://codex.wordpress.org/zh-cn:%E5%B0%8F%E5%B7%A5%E5%85%B7%E6%8E%A5%E5%8F%A3、https://automattic.com/code/widgets/api/
1.register_widget
register_widget用于注册一个Wordpress默认的挂件;
经过测试,register_widget注册的部件类中最终也是调用wp_register_sidebar_widget( WP_Widget类的567行调用了这个函数),注册的小部件。
2.the_widget
the_widget调用后,将输出指定的挂件
3.register_sidebars
register_sidebars用于注册一个侧边栏,可以指定一个索引进行注册
4.dynamic_sidebar
dynamic_sidebar用于输出注册好的侧边栏,通过索引指定输出某一个侧边栏
5.wp_register_sidebar_widget
wp_register_sidebar_widget用于注册一个边栏挂件。
没有回复内容