所有开发人员都应该知道的15个有用的WordPress函数

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()

此功能是直接文件上传功能。尽管它不会将文件移动到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'
);

结论

这些只是其中一些功能,其余功能似乎鲜为人知。我大约每两个月就会发现一个新的强大功能,而且我敢肯定,我的开发人员朋友可能会让我们更加惊讶。

如果您有最喜欢的晦涩功能或有用但无法使用的功能,请在评论中告知我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
上一篇

WordPress站群 WordPress多站点 管理开启方法

2020-11-28 21:23:16

下一篇

纯代码实现WordPress站内搜索页面url静态化

2021-1-31 6:32:51