WP如何检测格式类型(我可以使用它吗)?

时间:2019-09-09 作者:Matthew Brown aka Lord Matt

当我发表一篇主题支持(所有)帖子格式的帖子时,WordPress会建议它认为最适合我的帖子的格式类型。

它是如何做到这一点的?有没有可能在我自己的WP插件中利用这一点?

enter image description here

Update: 据我所知,这是内置的功能。如图所示。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

此功能似乎是块编辑器的独有功能。这也不是特别聪明。它所做的只是检查帖子是否有1个或2个块(没有更多),然后将第一个块映射到适当的帖子格式列表,如下所示:

switch ( name ) {
    case \'core/image\':
        return \'image\';
    case \'core/quote\':
    case \'core/pullquote\':
        return \'quote\';
    case \'core/gallery\':
        return \'gallery\';
    case \'core/video\':
    case \'core-embed/youtube\':
    case \'core-embed/vimeo\':
        return \'video\';
    case \'core/audio\':
    case \'core-embed/spotify\':
    case \'core-embed/soundcloud\':
        return \'audio\';
}
这是getSuggestedPostFormat() 选择器功能,它是core/editor 数据存储。您可以在古腾堡存储库中看到完整的源代码here. This 似乎可以很好地概括块编辑器中存储的数据。

要在编辑器的JS中使用此函数,可以使用:

wp.data.select(\'core/editor\').getSuggestedPostFormat();
逻辑非常简单,在PHP中用parse_blocks(), 但由于它基于使用的块,因此它只对使用块编辑器构建的内容有用。

function wpse_346884_get_suggested_post_format( $content ) {
    if ( ! has_blocks( $content ) ) {
        return null;
    }

    $block  = null;
    $blocks = parse_blocks( $post->post_content );

    if ( 1 === count( $blocks ) ) {
        $block = $blocks[0][\'blockName\'];
    }

    if ( 2 === count( $blocks ) ) {
        if ( \'core/paragraph\' === $blocks[1][\'blockName\'] ) {
            $block = $blocks[0][\'blockName\'];
        } 
    }

    switch ( $block ) {
        case \'core/image\':
            return \'image\';
        case \'core/quote\':
        case \'core/pullquote\':
            return \'quote\';
        case \'core/gallery\':
            return \'gallery\';
        case \'core/video\':
        case \'core-embed/youtube\':
        case \'core-embed/vimeo\':
            return \'video\';
        case \'core/audio\':
        case \'core-embed/spotify\':
        case \'core-embed/soundcloud\':
            return \'audio\';
    }

    return null;
}
然后,您可能需要实现一些额外的逻辑,以确保主题支持返回的post类型。

相关推荐

PHP文件不能在WordPress文件夹中工作,但可以在另一个虚拟主机中工作

因此,基本上我制作了一个php文件,该文件用两个参数(订单总数和订单号)调用,它会弹出一个带有EPC二维码的png(因此人们只需扫描它,他们的银行应用程序就会填写所有细节)。这个文件在一个空的虚拟主机中工作,但当我把它放在wordpress目录/虚拟主机中的任何位置时,它都无法工作。是否存在阻止非wordpress php文件执行的设置?