给the_category的a标签添加class和data-hover

//给 the_category的a标签添加class和data-hover function add_category_callback( $result ) { $class = strtolower( $result[2] ); $class = str_replace( ' ', '-', $class ); // do more sanitazion on the class (slug) like esc_attr() ...

Footer walker

//Class custom class Footer_Walker extends Walker_Nav_Menu { function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { $classes = empty($item->classes) ? array () : (array) $item->classes; $class_names ...

面包屑导航函数Breadcrumb

/*============================================= = BREADCRUMBS = =============================================*/ // to include in functions.php function the_breadcrumb() { $sep = '   »   '; if (!is_front_page()) { // Start the breadcrumb with a link ...

wordpress的validation

wp的validation ,  inval()  函数来检查是不是integer,  validation 用来check the data,  确保是valid的data,  validate的函数通常是 isset() ; empty(); strlen(); pre_match(); count(); in_array(); 只有两种结果,valid和Invalid。  sanitizition就是过滤数据, 函数如 sanitize_text_field($post['price'] ) , 预防别人在text的input里面输入script之类的标记来执行, sanitization can actually modify the data.  在你不想用很严格的策略来validation的时候你又要确保数据得到过滤,就用sanitization ,  sanitization 有几个函数,如: sanitize_email()  sanitize_text_field() sanitize_user() esc_url_raw(0  esc_url() 之类的是wordpress escaping 函数,  如果有已经代码被注入到我们的数据库, 然后我们又不想让这些代码在前端执行,  我们就要用到escaping函数,escaping 是securing the output,  过滤掉html tag和scirpt tags 等,  wordpress有很多escaping函数,但是 如果要展现在html上, 就用到esc_html() 函数,  esc_html 作用就是如果 是js 代码,通常会以文本形式展现在html上。  展现在html上的title, content之类的,或者自定义字段之类的,都用到esc_html()函数, 如果是Img或者a的url之类的,都用到esc_url函数, 如<img  src="<?php echo esc_url($url) ?>" >; esc_js() 用在script 里面执行特定的onclick 函数之类。  esc_attr() 用在属性里面,  用在class 或者title之类属性里面, esc_textarea()  用在  <textarea> 输入内容, escaping和sanitization的区别: 比方说: 有一段代码,  sometext <bold> here </bold> escaping 直接输出的是  sometext <bold> here </bold> 文本, 而sanitization过滤掉的html标签, 输出 sometext here.  有一些函数直接已经escaping了比方说 the_permalink() 已经直接是escaping的输出,  用get_permalink则要escaping输出, wordpress 直接带the的函数基本都是escaping输出,直接echo了的函数都是已经escaping .  带get的都是要escape, 

子主题,Child Theme一些细节

如果激活了child theme ,wp 首先加载的是child theme.  child them 就是为了避免让你在主题文件上更改导致无法还原的现象,chilld-theme 有一切主题的功能,  在child-theme创建文件可以更改主题的任何功能。  child-theme 要在style.css 里面头部加上 template: 名字为父级主题的名字。 child theme的text domain  可以命名为 protheme-child 这种。  child-theme可以接收父级主题所有功能性文件。比方说自定义函数之类。 child-theme只要一个style.css 就可以。 如果也增加了index.php那就是重写主题。  在child-theme里面引用其他文件的 路径函数是 : get_stylesheet_directory(). uri函数是 :   get_stylesheet_directory_uri()  get_stylesheet_uri 是针对当前目录当前主题, 包括子主题,如果要一直定义的路径是父主题, 就用到get_template_directory_uri() ;  child theme 的functions.php 不会覆盖父主题的 functions.php ,只会延伸, 可以把父级主题一些功能性函数全部移到child theme上, 这样不会因为主题升级而丢失 Create a stylesheet: style.css #  高亮处为必须添加:  /*Theme Name:   Twenty Fifteen ChildTheme URI:    http://example.com/twenty-fifteen-child/Description:  Twenty Fifteen Child ThemeAuthor:       John DoeAuthor URI:   http://example.comTemplate:     twentyfifteenVersion:      1.0.0License:      GNU General Public License v2 or laterLicense URI:  http://www.gnu.org/licenses/gpl-2.0.htmlTags:         light, dark, two-columns, right-sidebar, responsive-layout, accessibility-readyText Domain:  twentyfifteenchild*/ Using functions.php # Using functions.php Unlike style.css, the functions.php of a child theme does not override its counterpart from the parent. Instead, it is loaded in addition to the parent’s functions.php. (Specifically, it is loaded right before the parent’s file.) In that way, the functions.php of a child theme provides a smart, trouble-free method of modifying the functionality of a parent theme. Say that you want to add a PHP function to your theme. The fastest way would be to open its functions.php file and put the function there. But that’s not smart: The next time your theme is updated, your function will disappear. But there is an alternative way which is the smart way: you can create a child theme, add a functions.php file in it, and add your function to that file. The function will do the exact same job from there too, with the advantage that it will not be affected by future updates of the parent theme. Do not copy the full content of functions.php of the parent theme into functions.php in the child theme. The structure of functions.php is simple: An opening PHP tag at the top, and below it, your bits of PHP. In it you can put as many or as few functions as you wish. The example below shows an elementary functions.php file that does one simple thing: Adds a favicon link to the head element of HTML pages.<?php // Opening PHP tag - nothing should be before this, not even whitespace// Custom Function to Includefunctionmy_favicon_link() {echo<link rel="shortcut icon"type="image/x-icon"href="/favicon.ico"/>' . "\n";}add_action( 'wp_head', 'my_favicon_link'); Referencing or Including Other Files # Referencing or Including Other Files When you need to include files that reside within your child theme’s directory structure, you will need to use get_stylesheet_directory(). Since the style.css is in the root of your child theme’s subdirectory, get_stylesheet_directory() points to your child theme’s directory (not the parent theme’s directory). To reference the parent theme directory, you would use get_template_directory() instead. Below is an example illustrating how to use get_stylesheet_directory() when referencing a file stored within the child theme directory:1<?php require_once( get_stylesheet_directory(). '/my_included_file.php'); ?> Meanwhile, this example uses get_stylesheet_directory_uri() to display an image that is stored within the /images folder in the child theme directory.1<img src="<?php echo get_stylesheet_directory_uri(); ?>/images/my_picture.png"alt=""/> Unlike get_stylesheet_directory(), which returns a file path, get_stylesheet_directory_uri() returns a URL, which is useful for front-end assets.

WordPress customize Api

wordpress customize api :先钩子:functionthemeslug_customize_register( $wp_customize) {// Do stuff with $wp_customize, the WP_Customize_Manager object.}add_action( 'customize_register', 'themeslug_customize_register');每个method又有三种method: The Customizer Manager provides add_, get_, and remove_ methods for each Customizer object type; each works with an id. The get_ methods allow for direct modification of parameters specified when adding a control.add_action('customize_register','my_customize_register');functionmy_customize_register( $wp_customize) {$wp_customize->add_panel();$wp_customize->get_panel();$wp_customize->remove_panel();$wp_customize->add_section();$wp_customize->get_section();$wp_customize->remove_section();$wp_customize->add_setting();$wp_customize->get_setting();$wp_customize->remove_setting();$wp_customize->add_control();$wp_customize->get_control();$wp_customize->remove_control();}钩子注册函数 :functionthemeslug_customize_register( $wp_customize) {// Do stuff with $wp_customize, the WP_Customize_Manager object.}add_action( 'customize_register', 'themeslug_customize_register'); add_settings: Settings handle live-previewing, saving, and sanitization of your customizer objects. Each setting is managed by a control object. There are several parameters available when adding a new setting:$wp_customize->add_setting( 'setting_id', array('type'=> 'theme_mod', // or 'option''capability'=> 'edit_theme_options','theme_supports'=> '', // Rarely needed.'default'=> '','transport'=> 'refresh', // or postMessage'sanitize_callback'=> '','sanitize_js_callback'=> '', // Basically to_json.) ); It is usually most important to set the default value of the setting as well as its sanitization callback, which will ensure that no unsafe data is stored in the database. Typical theme usage:$wp_customize->add_setting( 'accent_color', array('default'=> '#f72525','sanitize_callback'=> 'sanitize_hex_color',) ); Typical plugin usage:$wp_customize->add_setting( 'myplugin_options[color]', array('type'=> 'option','capability'=> 'manage_options','default'=> '#ff2525','sanitize_callback'=> 'sanitize_hex_color',) ); Controls # Controls Controls are the primary Customizer object for creating UI. Specifically, every control must be associated with a setting, and that setting will save user-entered data from the control to the database (in addition to displaying it in the live-preview and sanitizing it). Controls can be added by the Customizer Manager and provide a robust set of UI options with minimal effort:$wp_customize->add_control( 'setting_id', array('type'=> 'date','priority'=> 10, // Within the section.'section'=> 'colors', // Required, core or custom.'label'=> __( 'Date'),'description'=> __( 'This is a date control with a red border.'),'input_attrs'=> array('class'=> 'my-custom-class-for-js','style'=> 'border: 1px solid #900','placeholder'=> __( 'mm/dd/yyyy'),),'active_callback'=> 'is_front_page',) ); The most important parameter when adding a control is its type — this determines what type of UI the Customizer will display. Core provides several built-in control types: <input> elements with any allowed type (see below)checkboxtextarearadio (pass a keyed array of values => labels to the choices argument)select (pass a keyed array of values => labels to the choices argument)dropdown-pages (use the allow_addition argument to allow users to add new pages from the control) For any input type supported by the html input element, simply pass the type attribute value to the type parameter when adding the control. This allows support for control types such as text, hidden, number, range, url, tel, email, search, time, date, datetime, and week, pending browser support. Controls must be added to a section before they will be displayed (and sections must contain controls to be displayed). This is done by specifying the section parameter when adding the control. Here is an example for adding a basic textarea control:$wp_customize->add_control( 'custom_theme_css', array('label'=> __( 'Custom Theme CSS'),'type'=> 'textarea','section'=> 'custom_css',) ); And here’s an example of a basic range (slider) control. Note that most browsers will not display the numeric value of this control because the range input type is designed for settings where the exact value is unimportant. If the numeric value is important, consider using the number type. The input_attrs parameter will map a keyed array of attributes => values to attributes on the input element, and can be used for purposes ranging from placeholder text to data- JavaScript-referenced data in custom scripts. For number and range controls, it allows us to set the minimum, maximum, and step values.$wp_customize->add_control( 'setting_id', array('type'=> 'range','section'=> 'title_tagline','label'=> __( 'Range'),'description'=> __( 'This is the range control description.'),'input_attrs'=> array('min'=> 0,'max'=> 10,'step'=> 2,),) ); Core Custom Controls # Core Custom Controls If none of the basic control types suit your needs, you can easily create and add custom controls. Custom controls are explained more fully later in this post, but they are essentially subclasses of the base WP_Customize_Control object that allow any arbitrary html markup and functionality that you might need. Core features several built-in custom controls that allow developers to implement rich JavaScript-driven features with ease. A color picker control can be added as follows:$wp_customize->add_control( newWP_Customize_Color_Control( $wp_customize, 'color_control', array('label'=> __( 'Accent Color', 'theme_textdomain'),'section'=> 'media',) ) ); WordPress 4.1 and 4.2 also added support for any type of multimedia content, with the Media control. The media control implements the native WordPress media manager, allowing users to select files from their library or upload new ones. By specifying the mime_type parameter when adding the control, you can instruct the media library show to a specific type such as images or audio:$wp_customize->add_control( newWP_Customize_Media_Control( $wp_customize, 'image_control', array('label'=> __( 'Featured Home Page Image', 'theme_textdomain'),'section'=> 'media','mime_type'=> 'image',) ) );$wp_customize->add_control( newWP_Customize_Media_Control( $wp_customize, 'audio_control', array('label'=> _( 'Featured Home Page Recording', 'theme_textdomain'),'section'=> 'media','mime_type'=> 'audio',) ) ); Note that settings associated with WP_Customize_Media_Control save the associated attachment ID, while all other media-related controls (children of WP_Customize_Upload_Control) save the media file URL to the setting. More information is available on Make WordPress Core. Additionally, WordPress 4.3 introduced the WP_Customize_Cropped_Image_Control, which provides an interface for cropping an image after selecting it. This is useful for instances where a particular aspect ratio is needed. Sections # Sections Sections are UI containers for Customizer controls. While you can add custom controls to the core sections, if you have more than a few options you may want to add one or more custom sections. Use the add_section method of the WP_Customize_Manager object to add a new section:$wp_customize->add_section( 'custom_css', array('title'=> __( 'Custom CSS'),'description'=> __( 'Add custom CSS here'),'panel'=> '', // Not typically needed.'priority'=> 160,'capability'=> 'edit_theme_options','theme_supports'=> '', // Rarely needed.) ); You only need to include fields that you want to override the default values of. For example, the default priority (order of appearance) is typically acceptable, and most sections shouldn’t require descriptive text if your options are self-explanatory. If you do want to change the location of your custom section, the priorities of the core sections are below: TitleIDPriority (Order)Site Title & Taglinetitle_tagline20Colorscolors40Header Imageheader_image60Background Imagebackground_image80Menus (Panel)nav_menus100Widgets (Panel)widgets110Static Front Pagestatic_front_page120default160Additional CSScustom_css200 In most cases, sections can be added with only one or two parameters being specified. Here’s an example for adding a section for options that pertain to a theme’s footer:// Add a footer/copyright information section.$wp_customize->add_section( 'footer', array('title'=> __( 'Footer', 'themename'),'priority'=> 105, // Before Widgets.) ); Top ↑ Panels # Panels The Customizer Panels API was introduced in WordPress 4.0, and allows developers to create an additional layer of hierarchy beyond controls and sections. More than simply grouping sections of controls, panels are designed to provide distinct contexts for the Customizer, such as Customizing Widgets, Menus, or perhaps in the future, editing posts. There is an important technical distinction between the section and panel objects. ...

如果自定义文章类型不显示自定义分类的话

在自定义分类注册的函数里,添加show_in_rest 为 true就可以。 这个原因通常因为版本升级引起。 //add custom taxonomies add_action( 'init', 'creat_weblinks_taxonomies',0 ); function creat_weblinks_taxonomies() { // Add new taxonomy, make it hierarchical (like categories) $labels = array( 'name' => _x( 'links ...

自定义wp登录页面

Customizing the Login Form The Login Form is your gateway to using and configuring the WordPress publishing platform. It controls access to the Administration Screens, allowing only registered users to login. ...