通用块名搜索可以在/wp-admin
后端以在存储块的帖子内容中查找一些文本:
我们可以搜索带前缀的块名称
wp:my-plugin/my-block
在岗位内:
example.com/wp-admin/edit.php
?s=wp:my-plugin%2Fmy-block%20&post_type=post
我们有一个额外的空间(url编码为
%20
和/作为
%2F
) 在块的名称之后,它的第一部分将存储为
<!-- wp:my-plugin/my-block -->
或具有属性
<!-- wp:my-plugin/my-block {...} -->
在帖子的内容中。
前端搜索也可以工作,但没有后端的帖子类型过滤(除非使用插件进行调整):
example.com
?s=wp:my-plugin%2Fmy-block%20
这种块搜索可能不是百分之百准确的(例如,如果你在博客上写块名),但在大多数情况下,它可能会给你一个足够好的估计。
More accurate searching
我们注意到
<!-- wp:my-plugin/my-block
使用:
example.com
?s=<%21--%20wp:my-plugin%2Fmy-block%20
将在生成的SQL中拆分为两个单词:
WHERE 1=1
AND (((wp_posts.post_title LIKE \'%<!--%\')
OR (wp_posts.post_excerpt LIKE \'%<!--%\')
OR (wp_posts.post_content LIKE \'%<!--%\'))
AND ((wp_posts.post_title LIKE \'%wp:my-plugin/my-block %\')
OR (wp_posts.post_excerpt LIKE \'%wp:my-plugin/my-block %\')
OR (wp_posts.post_content LIKE \'%wp:my-plugin/my-block %\')))
...
但我们可以通过
sentence
参数:
example.com
?s=<%21--%20wp:my-plugin%2Fmy-block&sentence=1
并获得如下搜索查询:
WHERE 1=1
AND (((wp_posts.post_title LIKE \'%<!-- wp:my-plugin/my-block %\')
OR (wp_posts.post_excerpt LIKE \'%<!-- wp:my-plugin/my-block %\')
OR (wp_posts.post_content LIKE \'%<!-- wp:my-plugin/my-block %\')))
...
或者,我们可以使用自定义
WP_Query
搜索方式:
WP_Query( array(
\'s\' => \'<!-- wp:my-plugin/my-block \',
\'sentence\' => 1,
\'post_type\' => array( \'post\', \'page\' ),
) );
或运行
has_block( \'my-plugin/my-block\', $post_content )
关于给定块名称或使用的所有相关帖子内容
parse_blocks( $post_content )
如果你需要更多的信息。
可重用块我们应该注意,可重用块的存储方式如下:
<!-- wp:block {"ref":23495} /-->
在帖子的内容中,所以我们可以研究
wp_block
存储它的帖子类型:
example.com/wp-admin/edit.php
?s=<%21--%20wp:my-plugin%2Fmy-block%20&post_status=all&post_type=wp_block&sentence=1
简单块类型搜索插件为了简化操作,我创建了一个插件,在管理中的每个列表下为注册的块类型添加了下拉过滤器:
要简化筛选时自动添加的搜索,请执行以下操作:
创建插件文件并激活:
<?php
/* Plugin Name: Simple Block Type Search
* Plugin URI: https://wordpress.stackexchange.com/a/392175/26350
*/
add_action( \'restrict_manage_posts\', \'simple_block_type_search\', 10, 2 );
function simple_block_type_search ( $post_type, $which ) {
if ( ! use_block_editor_for_post_type ( $post_type ) ) {
return;
}
$block_types = \\WP_Block_Type_Registry::get_instance()->get_all_registered();
$options = array_reduce( $block_types, function( $options, $block_type ) {
$val = \'!-- wp:\' . str_replace( \'core/\', \'\', $block_type->name ) . \' \';
return $options . sprintf ( \'<option value="%s" %s>%s</option>\',
esc_attr( $val ),
selected( get_query_var( \'s\' ), $val, false ),
esc_html( $block_type->name )
);
}, \'\' );
printf ( \'<select name="s"><option value="">%s</option>%s</select>
<input type="hidden" name="sentence" value="1"/>\',
esc_html__( \'Block Type Search\', \'simple_block_type_search\' ),
$options
);
}
要获取所有注册的块类型,我们
used:
\\WP_Block_Type_Registry::get_instance()->get_all_registered()
为了只显示支持的帖子类型的下拉列表,我们
used:
use_block_editor_for_post_type()
在这里,我们使用了内置的搜索功能和管理后端的用户界面。这就是为什么插件的代码行数如此之少。