WordPress具有供我们开发人员使用的强大功能。 我们可以凭空拿出帖子列表,处理几乎所有关于它们的内容,抓住我们想要的任何用户,并随意显示他们的社交媒体联系。
但是,由于未知原因,似乎忽略了很多功能。 我已经使用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()
此功能是直接文件上传功能 。 虽然它不会将文件移到上载文件夹中并将其添加到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()
此函数是PHP die()
函数的补充。 不同之处在于此函数将显示WordPress样式HTML,而不仅仅是纯文本。 您可以使用此函数停止PHP执行。 您可以添加要显示的消息,标题和其他参数,例如:
wp_die( "Oops, you don't have access to the", "Permission Denied" );
has_block()
在5.0版中,WordPress引入了一个基于块的编辑器,代号为Gutenberg。 该函数将识别内容是否包含古腾堡,与has_shortcode()
函数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'
);
结论
这些只是其中一些功能,其他功能似乎鲜为人知。 我大约每两个月就会发现一个新的强大功能,并且我确信我的开发人员朋友可能会让我们更加惊讶。
如果您有喜欢的晦涩功能或有用但无法使用的功能,请在评论中告知我们!
翻译自: https://www.hongkiat.com/blog/useful-wordpress-functions/