所有开发人员都应该知道的 15 个有用的 WordPress 功能
WordPress 充满了可供我们开发人员使用的强大功能。我们可以凭空拉出帖子列表,操纵它们的几乎所有内容,抓住我们想要的任何用户并快速显示他们的社交媒体连接。
然而,有相当多的功能似乎由于未知原因而被忽略。我已经使用 WordPress 编写代码大约 8 年了,偶尔我仍然会发现一些新东西!让我们来看看我最喜欢的一些被忽视的功能,并学习如何使用它们。
反垃圾邮件机器人()
我通常会对这个函数感到惊讶,它似乎是代码库中隐藏得最好的函数之一。<code>antispambot()</code>
用 HTML 实体替换字符,这是一种从邪恶的爬虫中屏蔽电子邮件地址的方法。
1个
2个
|
$email = 'mymail@mail.com' ; echo 'You can contact me at ' . antispambot( $email ) . ' any time' . |
虽然这是一个有用的花絮,但它也是为什么有些人批评 WordPress 的一个例子——这是一个可怕的命名函数。从阅读函数名称,你不知道它是做什么的。
human_time_diff()
大约一年前,当我第一次了解到这个功能时,我认为它一定是最近添加的,但我在更新日志中忽略了它。不完全的…
这个函数——输出两个时间戳之间的差异——自 1.5 版(即 2018 年 2 月 17 日!)以来一直存在。
我从法典中借用的以下精彩片段显示了当前帖子发布的时间。它使用帖子的发布日期作为第一个参数,当前日期作为第二个参数。
1个
|
echo 'This post was published ' . human_time_diff( get_the_time( 'U' ), current_time( 'timestamp' ) ) . ' ago' ; |
get_post_meta()
请耐心等待,我知道这是一个很好用的函数,但是,它是如何工作的并不是常识。首先,通过省略第二个和第三个参数,您可以提取帖子的所有元数据。
1个
|
$all_meta = get_post_meta( 14 ); |
即使您只获取单个键的数据,所有 postmeta 都会被提取。
原因实际上很合乎逻辑。元数据在多个地方使用。如果<code>get_post_meta()</code>
每次使用时都查询数据库,我们最终会遇到太多查询。相反,如果您提取元数据,它会将其全部缓存并在所有后续元数据检索中使用缓存的值。
wp_upload_bits()
此功能是一个直接的文件上传功能。虽然它不会将文件移动到上传文件夹并将其添加到 WordPress 媒体部分,但它非常方便,您可以随时使用该功能完成其余工作<code>wp_insert_attachment()</code>
。
1个
|
$upload = wp_upload_bits( $file [ 'name' ], null, file_get_contents ( $file [ 'tmp_name' ] ) ); |
对此有一些解释:第一个参数是文件名。第二个已折旧,因此应将其设置为 null(符合 WordPress 一致性)。第三个参数是文件的实际内容。
get_post_field()
过去我看到过很多例子,有人写了一个循环来获取帖子的评论数,或者为它写了一个专门的数据库查询。你不需要它们,你需要的是<code>get_post_field()</code>
。此函数检索数据库中单个帖子的单个字段的值。让我们抓住评论数!
1个
|
This post has <?php echo get_post_field( 'comment_count' , 4124 ) ?> comments. |
wpautop()
这个功能有点受到关注,但它仍然相对不为人知。它类似于 PHP 本机nl2br
,但不是创建新行,而是将您的内容包装在段落中。
如果您有一个文本框并且您希望确保当用户创建带有双换行符的段落时,它们在前端也保持可见,这将很有用。
1个
2个
|
<h2>What Our Users Say</h2> <?php echo wpautop( $user_comment ) ?> |
wp_is_mobile()
这个恰当命名的函数可以检测用户何时使用移动设备并允许您相应地显示内容。由于这是一个条件标记,它会根据场景返回 true 或 false。
1个
2个
3个
|
<?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,还可以设置状态代码,这也非常适合处理永久重定向。
1个
2个
|
// For a URL which is no longer in use wp_redirect( 'http://website.com/new-url/' , 301 ); |
分页链接()
我敢打赌,这个功能的默默无闻部分归功于WP-PageNavi插件的流行。默认情况下,WordPress在您的帖子列表末尾显示上一个/下一个链接。WP-PageNavi将其替换为页码。
这实际上可以通过使用函数进行一些工作来完成<code>paginate_links()</code>
。它有很多参数,所以我建议看一下文档。
codex 中的以下示例显示了如何将其添加到默认循环,但将其添加到自定义循环并不难。
1个
2个
3个
4个
5个
6个
7
8个
|
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 执行。您可以添加要显示的消息、标题和其他参数,例如:
1个
|
wp_die( "Oops, you don't have access to the" , "Permission Denied" ); |
has_block()
在 5.0 版本中,WordPress 引入了一个基于块的编辑器,代号为 Gutenberg。该函数会识别内容是否包含古腾堡,与函数完全相同has_shortcode()
。true
如果内容确实包含块,或者false
不包含块,它将返回。
1个
2个
3个
4个
|
<?php if ( has_block() ) { // Content has a block. } ?> |
wp_set_script_translations()
由于 WordPress 用户界面的许多部分将转移到 JavaScript,因此需要一种方便的方法来在 JavaScript 中注册 WordPress 可以解析和理解的可翻译文本。使用此函数为您的脚本设置翻译后的字符串。下面是一个例子:
1个
2个
|
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 编辑器中注册一个新块。您的块将出现在新的编辑器中并将其插入。
1个
2个
3个
4个
5个
6个
|
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 端而不是在浏览器(前端)端进一步处理的输出时非常有用。
1个
2个
3个
4个
|
$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
例如,此功能旨在与 结合使用。
1个
2个
3个
4个
5个
6个
7
8个
9
10
11
12
13
14
15
16
17
|
// 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' ); |
结论
这些只是一些似乎比其他功能鲜为人知的功能。我大约每两个月就会发现一个很棒的新功能,而且我相信我的开发人员朋友们会给我们带来更多惊喜。
如果您有最喜欢的晦涩功能或有用但不可用的功能,请在评论中告诉我们!