在博客页面上显示默认编辑器(管理面板)

时间:2015-07-07 作者:Howdy_McGee

在WordPress 4.2中,它包含了一个很好的特性,该特性标记了哪个页面是首页,哪个页面是博客(最新帖子)。不幸的是,它还删除了指定用于显示最新帖子的页面上的默认编辑器,而是显示以下消息:

您当前正在编辑显示最新帖子的页面。

我想通过以下方式将内容分配到博客页面,以显示我的最新帖子:

get_post_field( \'post_content\', get_option( \'page_for_posts\' ) );
如何将默认WP编辑器重新添加到管理面板中的博客页面,而不添加单独的元框?

2 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

在WordPress 4.2中,无论出于何种原因,在指定显示最新帖子的页面上,都会删除编辑器。以下函数(original solution found here 通过crgeary ) 将重新添加编辑器并删除通知:

您当前正在编辑显示最新帖子的页面。

以下是有关所用挂钩的一些信息:


if( ! function_exists( \'fix_no_editor_on_posts_page\' ) ) {

    /**
     * Add the wp-editor back into WordPress after it was removed in 4.2.2.
     *
     * @param Object $post
     * @return void
     */
    function fix_no_editor_on_posts_page( $post ) {
        if( isset( $post ) && $post->ID != get_option(\'page_for_posts\') ) {
            return;
        }

        remove_action( \'edit_form_after_title\', \'_wp_posts_page_notice\' );
        add_post_type_support( \'page\', \'editor\' );
    }
    add_action( \'edit_form_after_title\', \'fix_no_editor_on_posts_page\', 0 );
 }
自WordPress 4.9.6起,编辑WordPress 4.9将无法重新安装编辑器。看起来好像edit_form_after_title 还没来得及打电话。在中删除编辑器后,调用了最早的未弃用钩子edit-form-advanced.php, 看起来还可以。

除了钩子的变化外,参数的数量也发生了变化。

if( ! function_exists( \'fix_no_editor_on_posts_page\' ) ) {

    function fix_no_editor_on_posts_page( $post_type, $post ) {
        if( isset( $post ) && $post->ID != get_option(\'page_for_posts\') ) {
            return;
        }

        remove_action( \'edit_form_after_title\', \'_wp_posts_page_notice\' );
        add_post_type_support( \'page\', \'editor\' );
    }

    add_action( \'add_meta_boxes\', \'fix_no_editor_on_posts_page\', 0, 2 );

 }

SO网友:Wojtek Szałkiewicz

已经有一段时间了,但我在寻找在博客页面启用古腾堡编辑器的方法时遇到了这个主题。在谷歌上找不到任何线索,所以我潜入wordpress代码,找到了解决方案。代码如下:

add_filter( \'replace_editor\', \'enable_gutenberg_editor_for_blog_page\', 10, 2 );
/**
 * Simulate non-empty content to enable Gutenberg editor
 *
 * @param bool    $replace Whether to replace the editor.
 * @param WP_Post $post    Post object.
 * @return bool
 */
function enable_gutenberg_editor_for_blog_page( $replace, $post ) {

    if ( ! $replace && absint( get_option( \'page_for_posts\' ) ) === $post->ID && empty( $post->post_content ) ) {
        // This comment will be removed by Gutenberg since it won\'t parse into block.
        $post->post_content = \'<!--non-empty-content-->\';
    }

    return $replace;

}
我使用了“replace\\u editor”过滤器,因为这是检查Gutenberg是否应该加载之前使用的最后一个过滤器/操作。这可能是当前post对象可用的任何早期筛选器或操作。

WordPress检查两件事:如果当前帖子ID与page_for_posts 选项,如果内容为空,那么在这个过滤器中,我们只添加一些虚假内容,古腾堡将删除这些内容,因为它是随机的HTML注释。

希望有人会发现它有用:)

结束