为WordPress自定义贴文类型设置默认格式(post format)

blog icon information internet

可以通过在保存贴文(post)时使用save_post钩子来设置贴文格式(post format)。而由于在贴文保存过程中要对贴文格式进行设置,可能会引发无限循环,因此我们需要在函数内部使用remove_actionadd_action来避免这种情况。

以下以indieblocks_likeindieblocks_note之二则贴文类型(post type)为例,举出需要添加到functions.php文件(或者Snippets插件)的代码:

function set_default_post_format( $post_id, $post ) {
    // 如果这是一次自动保存,要跳过
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
        return;

    // 针对不同的 post type 设置不同的默认 post format
    switch( $post->post_type ) {
        case 'indieblocks_like':
            $format = 'link';
            break;
        case 'indieblocks_note':
            $format = 'status';
            break;
        default:
            return;
    }

    // 检查当前 post format,如果未设置,使用默认值
    if ( ! get_post_format( $post_id ) ) {
        // 在设置 post format 之前,移除这个函数,以防止无限循环
        remove_action( 'save_post', 'set_default_post_format', 10, 2 );
        set_post_format( $post_id, $format );
        // 设置完 post format 后,再次添加这个函数
        add_action( 'save_post', 'set_default_post_format', 10, 2 );
    }
}
add_action( 'save_post', 'set_default_post_format', 10, 2 );

这个函数将在每次保存贴文时运行,检查贴文格式是否已经设置,如果没有,它会为indieblocks_like贴文类型设置为link格式,为indieblocks_note贴文类型设置为status格式。

上述代码代码可以满足以下需求:除非特意在编辑过程中指定了贴文格式,否则就按照设定的默认贴文格式进行。

因为在set_default_post_format函数中,首先使用get_post_format函数检查了贴文是否已经有了贴文格式。如果贴文已经有了贴文格式(这就意味着在编辑过程中已经指定了贴文格式),那么函数就会立即返回,不会覆盖已经设定的贴文格式。只有在贴文没有设定贴文格式的时候,才会根据indieblocks_likeindieblocks_note设置默认的贴文格式。

按,为此,也需要保证主题已经支持所要使用的贴文格式。可以通过以下代码启用支持:

add_theme_support( 'post-formats', array( 'link', 'status' ) );

Discover more from 山月

Subscribe now to keep reading and get access to the full archive.

Continue reading