Month: August 2020

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) checkbox textarea radio (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. Themes should not register their own panels in most cases. Sections do not need to be nested under a panel, and each section should generally contain multiple controls. Controls should also be added to the Sections that core provides, such as adding color options to the colors Section. Also make sure that your options are as streamlined and efficient as possible; see the WordPress philosophy. Panels are designed as contexts for entire features such as Widgets, Menus, or Posts, not as wrappers for generic sections. If you absolutely must use Panels, you’ll find that the API is nearly identical to that for Sections:$wp_customize->add_panel( ‘menus’, array(‘title’=> __( ‘Menus’),’description’=> $description, // Include html tags such as <p>.’priority’=> 160, // Mixed with top-level-section hierarchy.) );$wp_customize->add_section( $section_id, array(‘title’=> $menu->name,’panel’=> ‘menus’,) ); Panels must contain at least one Section, which must contain at least one Control, to be displayed. As you can see in the above example, Sections can be added to Panels similarly to how Controls are added to Sections. However, unlike with controls, if the Panel parameter is empty when registering a Section, it will be displayed on the main, top-level Customizer context, as most sections should not be contained with a panel. Top ↑ Custom Controls, Sections, and Panels # Custom Controls, Sections, and Panels Custom Controls, Sections, and Panels can be easily created by subclassing the PHP objects associated with each Customizer object: WP_Customize_Control, WP_Customize_Section, and WP_Customize_Panel (this can also be done for WP_Customize_Setting, but custom settings are typically better implemented using custom setting types, as outlined in the next section). Here’s an example for a basic custom control:classWP_New_Menu_Customize_Control extendsWP_Customize_Control {public$type= ‘new_menu’;/*** Render the control’s content.*/publicfunctionrender_content() {?><button class=”button button-primary”id=”create-new-menu-submit”tabindex=”0″><?php _e( ‘Create Menu’); ?></button><?php}} By subclassing the base control class, you can override any functionality with custom functionality or use the core functionality depending on your needs. The most common function to override is render_content() as it allows you to create custom UI from scratch with HTML. Custom Controls should be used with caution, however, as they may introduce UI that is inconsistent with the surrounding core UI and cause confusion for users. Custom Customizer objects can be added similarly to how default controls, sections, and panels are added:$wp_customize->add_control(newWP_Customize_Color_Control($wp_customize, // WP_Customize_Manager’accent_color’, // Setting idarray( // Args, including any custom ones.’label’=> __( ‘Accent Color’),’section’=> ‘colors’,))); Parameters passed when adding controls are mapped to class variables within the control class, so you can add and use custom ones where certain parts of your custom object are different across different instances. When creating custom Controls, Sections, or Panels, it is strongly recommended to reference the core code, in order to fully understand the available functionality that can be overridden. Core also includes examples of custom objects of each type. This can be found in wp-includes/class-wp-customize-control.php, wp-includes/class-wp-customize-section.php, and wp-includes/class-wp-customize-panel.php. There is also a JavaScript API for each Customizer object type, which can be extended with custom objects; see the Customizer JavaScript API section for more details. Top ↑ Customizer UI Standards # Customizer UI Standards Custom customizer controls, sections, and panels should match core UI practices wherever possible. This includes relying on standards from wp-admin, such as using the .button and .button-primary classes, for example. There are also a few standards specific to the customizer (as of WordPress 4.7): White background colors are used only to indicate navigation and actionable items (such as inputs) The general #eee background color provides visual contrast against the white elements 1px #ddd borders separate navigational elements from background margins and from each other 15px of spacing is provided between elements where visual separation is desired 4px borders are used on one side of a navigation element to show hover or focus, with a color of #0073aa Customizer text uses color: #555d66, with #0073aa for hover and focus states on navigation elements Top ↑ […]

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

在自定义分类注册的函数里,添加show_in_rest 为 true就可以。 这个原因通常因为版本升级引起。

自定义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. How to Login If you installed WordPress in your website’s root directory, your login page is:http://example.com/wp-login.php If you installed WordPress in its own subdirectory, e.g., /directory, […]

Search.js without Jquery

用Javascript dom实现rest api search的操作:

WordPress add option page

add_options_page($page_title, $menu_title, $capability, $menu_slug, $function ); 在后台设置中增加菜单;  php ob_start() 函数 ; 可以在obstart 后面添加html ;  if (!defined(‘ABSPATH’)) die(‘You have no authority!’); 是说如果这个文件能直接通过绝对地址访问就退出或者警告。 如果die 变成exit() 函数就退出; 如通过这种绝对地址访问 :  http://milad.com.cn/wp-content/plugins/university-post-types/university-post-types.php

WordPress的time

get_the_excerpt  不带p, the_excerpt 带p ; 如果日期显示是 20201023这种类型的,可以通过Php的class datetime来进行转换, 转换成the_time(‘M’) 之类的。 也就是显示 JUL 这种,  day显示的是数字。 <?php the_time( ‘M’); ?>, <?php the_time( ‘d’); ?> , 详细了解php的DateTime class ; $event_date = new DateTime(get_field(‘event_time’));     $month = $event_date->format(‘M’);     $day = $event_date->format(‘d’);