
media_upload_form ( $errors = null )
media_upload_form函数用于显示WordPress媒体上传器中的媒体上传表单: 当点击”添加媒体”按钮并选择”媒体库”标签时,它被调用。开发人员可以使用这个函数来修改媒体上传表格,或者添加他们自己的自定义媒体上传表格。
输出传统的媒体上传表格。
function media_upload_form( $errors = null ) { global $type, $tab, $is_IE, $is_opera; if ( ! _device_can_upload() ) { echo '<p>' . sprintf( /* translators: %s: https://apps.wordpress.org/ */ __( 'The web browser on your device cannot be used to upload files. You may be able to use the <a href="%s">native app for your device</a> instead.' ), 'https://apps.wordpress.org/' ) . '</p>'; return; } $upload_action_url = admin_url( 'async-upload.php' ); $post_id = isset( $_REQUEST['post_id'] ) ? (int) $_REQUEST['post_id'] : 0; $_type = isset( $type ) ? $type : ''; $_tab = isset( $tab ) ? $tab : ''; $max_upload_size = wp_max_upload_size(); if ( ! $max_upload_size ) { $max_upload_size = 0; } ?> <div id="media-upload-notice"> <?php if ( isset( $errors['upload_notice'] ) ) { echo $errors['upload_notice']; } ?> </div> <div id="media-upload-error"> <?php if ( isset( $errors['upload_error'] ) && is_wp_error( $errors['upload_error'] ) ) { echo $errors['upload_error']->get_error_message(); } ?> </div> <?php if ( is_multisite() && ! is_upload_space_available() ) { /** * Fires when an upload will exceed the defined upload space quota for a network site. * * @since 3.5.0 */ do_action( 'upload_ui_over_quota' ); return; } /** * Fires just before the legacy (pre-3.5.0) upload interface is loaded. * * @since 2.6.0 */ do_action( 'pre-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores $post_params = array( 'post_id' => $post_id, '_wpnonce' => wp_create_nonce( 'media-form' ), 'type' => $_type, 'tab' => $_tab, 'short' => '1', ); /** * Filters the media upload post parameters. * * @since 3.1.0 As 'swfupload_post_params' * @since 3.3.0 * * @param array $post_params An array of media upload parameters used by Plupload. */ $post_params = apply_filters( 'upload_post_params', $post_params ); /* * Since 4.9 the `runtimes` setting is hardcoded in our version of Plupload to `html5,html4`, * and the `flash_swf_url` and `silverlight_xap_url` are not used. */ $plupload_init = array( 'browse_button' => 'plupload-browse-button', 'container' => 'plupload-upload-ui', 'drop_element' => 'drag-drop-area', 'file_data_name' => 'async-upload', 'url' => $upload_action_url, 'filters' => array( 'max_file_size' => $max_upload_size . 'b' ), 'multipart_params' => $post_params, ); /* * Currently only iOS Safari supports multiple files uploading, * but iOS 7.x has a bug that prevents uploading of videos when enabled. * See #29602. */ if ( wp_is_mobile() && strpos( $_SERVER['HTTP_USER_AGENT'], 'OS 7_' ) !== false && strpos( $_SERVER['HTTP_USER_AGENT'], 'like Mac OS X' ) !== false ) { $plupload_init['multi_selection'] = false; } // Check if WebP images can be edited. if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) { $plupload_init['webp_upload_error'] = true; } /** * Filters the default Plupload settings. * * @since 3.3.0 * * @param array $plupload_init An array of default settings used by Plupload. */ $plupload_init = apply_filters( 'plupload_init', $plupload_init ); ?> <script type="text/javascript"> <?php // Verify size is an int. If not return default value. $large_size_h = absint( get_option( 'large_size_h' ) ); if ( ! $large_size_h ) { $large_size_h = 1024; } $large_size_w = absint( get_option( 'large_size_w' ) ); if ( ! $large_size_w ) { $large_size_w = 1024; } ?> var resize_height = <?php echo $large_size_h; ?>, resize_width = <?php echo $large_size_w; ?>, wpUploaderInit = <?php echo wp_json_encode( $plupload_init ); ?>; </script> <div id="plupload-upload-ui" class="hide-if-no-js"> <?php /** * Fires before the upload interface loads. * * @since 2.6.0 As 'pre-flash-upload-ui' * @since 3.3.0 */ do_action( 'pre-plupload-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores ?> <div id="drag-drop-area"> <div class="drag-drop-inside"> <p class="drag-drop-info"><?php _e( 'Drop files to upload' ); ?></p> <p><?php _ex( 'or', 'Uploader: Drop files here - or - Select Files' ); ?></p> <p class="drag-drop-buttons"><input id="plupload-browse-button" type="button" value="<?php esc_attr_e( 'Select Files' ); ?>" class="button" /></p> </div> </div> <?php /** * Fires after the upload interface loads. * * @since 2.6.0 As 'post-flash-upload-ui' * @since 3.3.0 */ do_action( 'post-plupload-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores ?> </div> <div id="html-upload-ui" class="hide-if-js"> <?php /** * Fires before the upload button in the media upload interface. * * @since 2.6.0 */ do_action( 'pre-html-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores ?> <p id="async-upload-wrap"> <label class="screen-reader-text" for="async-upload"><?php _e( 'Upload' ); ?></label> <input type="file" name="async-upload" id="async-upload" /> <?php submit_button( __( 'Upload' ), 'primary', 'html-upload', false ); ?> <a href="#" onclick="try{top.tb_remove();}catch(e){}; return false;"><?php _e( 'Cancel' ); ?></a> </p> <div class="clear"></div> <?php /** * Fires after the upload button in the media upload interface. * * @since 2.6.0 */ do_action( 'post-html-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores ?> </div> <p class="max-upload-size"> <?php /* translators: %s: Maximum allowed file size. */ printf( __( 'Maximum upload file size: %s.' ), esc_html( size_format( $max_upload_size ) ) ); ?> </p> <?php /** * Fires on the post upload UI screen. * * Legacy (pre-3.5.0) media workflow hook. * * @since 2.6.0 */ do_action( 'post-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores }
apply_filters
函数用于调用一个钩子上的所有过滤器函数。它的基本用法如下:
$value = apply_filters( 'hook_name', $value, $var1, $var2, ... );
其中:
'hook_name
' 是你要应用过滤器函数的钩子名称。
$value
是你要传递给过滤器函数的值。
$var1, $var2, …
是你要传递给过滤器函数的其他参数。
常量的命名有一些约定和规则。首先,常量的名称应该全部大写,用下划线分隔单词。例如,MY_CONSTANT_NAME
。其次,常量的名称应该是有意义的,能够清晰地描述常量的用途或值。最后,避免使用已经被PHP或WordPress定义的常量名称,以避免冲突。
在WordPress中,常量的命名规则和约定如下:
ABSPATH
。WP_DEBUG
.WP_
,例如: WP_CONTENT_DIR
。例如,以下是符合WordPress常量命名规则的示例:
define( 'WP_DEBUG', true ); define( 'WP_CONTENT_DIR', '/var/www/html/wp-content' ); define( 'MY_CUSTOM_CONSTANT', 'Hello World' );
遵循这些命名规则和约定可以帮助保持代码的一致性和可读性,使得WordPress主题或插件更易于理解、维护和扩展。
要使用WordPress REST API,可以按照以下步骤进行操作:
这些是使用WordPress REST API的基本步骤。你可以根据具体需求进行深入学习和实践,探索更多可用的终点和功能。对于详细的API文档和参考,请查阅WordPress官方文档或REST API官方手册。
在WordPress中,钩子函数可以在以下几个地方使用:
add_filter()
`函数注册在特定过滤器(filter hooks)上执行的钩子函数。add_action()
`函数在特定的动作点上添加自定义内容,或使用` add_filter()
`函数修改主题函数的输出。functions.php
`的文件,用于添加自定义功能和修改WordPress行为。该文件中可以使用钩子函数来注册特定的动作点和过滤器,并添加相应的钩子函数来处理这些事件。do_action()
`或` apply_filters()
`函数调用,然后在需要的地方注册相应的钩子函数。总结起来,WordPress中的钩子函数可以在插件、主题、自定义功能文件以及WordPress核心文件中使用,用于注册和处理特定的WordPress事件或动作。这允许开发者在这些地方插入自定义逻辑,以实现个性化的功能和修改WordPress的行为。
wp_insert_post()
函数用于插入新的文章。你需要传递一个关联数组,包含文章的各项参数,如标题、内容、分类等。例如:
$post_data = array( 'post_title' => '新的文章', 'post_content' => '这是一篇新的文章。', 'post_status' => 'publish', // 设置为 'publish' 以立即发布文章 'post_type' => 'post', // 也可以设置为 'page' 或其他自定义的文章类型 ); $post_id = wp_insert_post($post_data);
如果你想要插入更复杂的文章,例如包含多个分类或标签,你可以在 $post_data
数组中添加更多的键值对。
你可以使用 get_template_directory()
和 get_stylesheet_directory()
函数来获取当前主题的目录路径。 get_template_directory()
返回当前主题模板的目录路径,而 get_stylesheet_directory()
返回当前子主题的目录路径。例如:
$theme_dir = get_template_directory(); $child_theme_dir = get_stylesheet_directory();