但是,由于未知原因,有许多功能似乎被忽略了。我去过编码使用WordPress已有大约8年的时间,偶尔我仍然会发现一些新东西!让我们看一下我最喜欢的一些被忽略的功能,并学习如何在使用过程中使用它们。
antispambot()
我通常会为此挑一些眉毛,它似乎是最隐秘的之一 职能在代码库中。<code>antispambot()</code>
用HTML实体替换字符,这是从恶意抓取工具屏蔽电子邮件地址的一种方法。
$email = 'mymail@mail.com';
echo 'You can contact me at ' . antispambot( $email ) . ' any time'.
尽管这是一个有用的花絮,但它也是为什么有人批评WordPress的一个例子–这是一个可怕的命名函数。通过阅读函数名称,您不知道它的作用。
human_time_diff()
大约一年前,当我第一次了解此功能时,我认为它一定是最近添加的,但我在变更日志中却忽略了它。不完全的…
自1.5版(即2018年2月17日!)以来,该功能(用于输出两个时间戳之间的差异)已经存在。
我从抄本中借来的以下简短代码片段显示了当前帖子的发布时间。它使用帖子的发布日期作为第一个参数,使用当前日期作为第二个参数。
echo 'This post was published ' . human_time_diff( get_the_time( 'U' ), current_time( 'timestamp' ) ) . ' ago';
get_post_meta()
在这里忍受,我知道这是一个很好用的功能,但是,它的工作原理并不那么常见。首先,通过省略第二和第三参数,您可以提取帖子的所有元数据。
$all_meta = get_post_meta( 14 );
即使您仅获取单个键的数据,反之亦然会提取所有后置元。
原因实际上是很合逻辑的。元数据在多个地方使用。如果<code>get_post_meta()</code>
每次使用数据库都查询数据库,那么最终将导致太多查询。相反,如果您提取元数据,它将对其全部进行缓存,并在所有后续的元数据检索中使用缓存的值。
wp_upload_bits()
此功能是直接文件上传功能。尽管它不会将文件移动到uploads文件夹中,也不会将其添加到WordPress媒体部分,但它非常方便,您可以随时使用该<code>wp_insert_attachment()</code>
功能进行其余操作。
$upload = wp_upload_bits( $file['name'], null, file_get_contents( $file['tmp_name'] ) );
对此有一些解释:第一个参数是文件名。第二个已贬值,因此应将其设置为null(WordPress一致性下的Eyeroll)。第三个参数是文件的实际内容。
get_post_field()
过去,我看到了很多示例,其中有人编写了一个循环来获取帖子的评论计数,或者为此编写了专门的数据库查询。您不需要它们,您需要的是<code>get_post_field()</code>
。此函数为数据库中的单个帖子检索单个字段的值。让我们来评论数吧!
This post has <?php echo get_post_field( 'comment_count', 4124 ) ?> comments.
wpautop()
该功能已经引起了人们的关注,但仍然相对未知。它与PHP本机相似,nl2br
但不创建新行,而是将内容包装在段落中。
如果您有一个文本框,并且要确保当用户创建带有双换行符的段落时,它们也可以在前端保持可见,这很有用。
<h2>What Our Users Say</h2>
<?php echo wpautop( $user_comment ) ?>
wp_is_mobile()
这个恰当命名的功能可以检测用户何时在移动设备上,并允许您相应地显示内容。由于这是一个条件标签,因此它会根据情况返回true或false。
<?php if( wp_is_mobile() ) : ?>
Visit our website on your desktop for a richer user experience
<?php endif ?>
wp_redirect()
最后一个示例显示了另一个简洁的函数:<code>wp_redirect()</code>
。应该使用它代替PHP本机的<code> header()</ code>函数。WordPress重定向功能允许您设置要重定向到的URL,还可以设置状态码,也非常适合处理永久重定向。
// For a URL which is no longer in use
wp_redirect( 'http://website.com/new-url/', 301 );
paginate_links()
我敢打赌,此功能的部分原因在于WP-PageNavi插件的普及。默认情况下,WordPress在帖子列表的末尾显示上一个/下一个链接。WP-PageNavi替换为页码。
实际上,使用这些<code>paginate_links()</code>
功能只需做一些工作即可完成。它有很多参数,所以我建议您看一下文档。
以下来自法典的示例显示了如何将其添加到默认循环,但是将其添加到自定义循环并不是一件容易的事。
global $wp_query;
$big = 999999999; // need an unlikely integer
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages
) );
wp_die()
此功能是PHPdie()
功能的补充。不同之处在于此函数将显示WordPress样式的HTML,而不仅仅是纯文本。您可以使用此函数停止PHP执行。您可以添加要显示的消息,标题和其他参数,例如:
wp_die( "Oops, you don't have access to the", "Permission Denied" );
has_block()
在5.0版中,WordPress引入了一个基于代码块的编辑器,代号为Gutenberg。此功能将识别内容是否包含古腾堡,与该has_shortcode()
功能完全相同。true
如果内容确实包含一个块,或者不包含一个块,它将返回false
。
<?php
if ( has_block() ) {
// Content has a block.
} ?>
wp_set_script_translations()
由于WordPress用户界面的许多部分都将迁移到JavaScript,因此需要一种便捷的方法在WordPress可以解析和理解的JavaScript中注册可翻译文本。使用此功能可以为脚本设置翻译后的字符串。下面是一个示例:
wp_enqueue_script( 'my-script', plugins_url( 'js/my-script.js', __FILE__ ) );
wp_set_script_translations( 'my-script', 'mu-text-domain' );
register_block_type()
WordPress 5.0中的另一个突出功能。此功能允许您在新的WordPress编辑器中注册新块。您的块将出现在新的编辑器中并插入。
register_block_type( 'my-plugin/new-block', array(
'title' => 'New Block',
'icon' => 'megaphone',
'category' => 'widgets',
'render_callback' => 'render_function_callback',
) );
rest_do_request()
此功能允许您通过PHP调用WordPress REST API端点。当您需要从REST API检索输出以处理将在PHP端而不是浏览器(前端)端进一步处理时,此功能非常有用。
$request = new WP_REST_Request( 'GET', "/wp/v2/posts" );
$request->set_header( 'X-WP-Nonce', wp_create_nonce( 'wp_rest' ) );
$response = rest_do_request( $request );
$data = 200 === $response->get_status() ? $response->get_data() : [];
rest_preload_api_request()
在WordPress中构建大量JavaScript的UI时,通常需要在页面内加载一组初始数据。这是允许您执行此操作的功能。例如,此功能应与结合使用array_reduce
。
// Preload common data.
$preload_paths = array(
'/',
'/wp/v2/types?context=edit',
'/wp/v2/taxonomies?per_page=-1&context=edit',
'/wp/v2/themes?status=active',
);
preload_data = array_reduce(
$preload_paths,
'rest_preload_api_request',
array()
);
wp_add_inline_script(
'wp-api-fetch',
sprintf( 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', wp_json_encode( $preload_data ) ),
'after'
);
结论
这些只是其中一些功能,其余功能似乎鲜为人知。我大约每两个月就会发现一个新的强大功能,而且我敢肯定,我的开发人员朋友可能会让我们更加惊讶。
如果您有最喜欢的晦涩功能或有用但无法使用的功能,请在评论中告知我们!