web-dev-qa-db-ja.com

テンプレートが選択されている場合ページビジネスエディタを隠す - redux

と前の同一の質問 に与えられた答えは残念ながら私のWP installに取り組んでいません。

私は推奨する関数のバージョンを使用しています there

function nim_hide_editor() {
    $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;
    $template = get_post_meta( $post_ID , '_wp_page_template', true );

    if($template == 'portfolio.php'){
        /*echo "<style>#postdivrich{display:none;}</style>";*/
        remove_post_type_support( 'page', 'editor' );
    }
}
add_action('admin_init', 'nim_hide_editor');

私はコメントアウトされた行を含めて、代替回答に記載されているスタイルタグをエコーする手法を試したことを示しましたが、ページテンプレートで選択するときはどちらも機能しませんでした。しかしながら...

2つのことが矛盾しているように見えます。

  • 私はCPanelを通して私のSQLデータベースを調べました、そして、 "portfolio.php"は実際に私がこれを使用しようとしているページのためにpost_metaに格納された値です。

  • $ post_IDでページを選択し、remove_post_type_supportを使用すると、が機能します

        if($post_ID == '13'){
        remove_post_type_support( 'page', 'editor' );
    }
    

私は少し夢中になっています - 私はすべてをトリプルチェックしたようです。そのテンプレートを使用するpost_IDの配列でそのエディタを隠すことはできますが、そのテンプレートを使用する将来のページでは機能しません。

3
nimmolo

以下はTwentyTwelveでテストして私のために働きます。

load-{$pagenow}の代わりにadmin_initを使用すると、グローバルな$pagenowのチェックを回避できます。詳細についてはコメントを参照してください。

// Run only when editing a page
// For new pages load-page-new.php should be used
// See: http://core.trac.wordpress.org/browser/tags/3.5.1/wp-admin/admin.php#L217
add_action( 'load-page.php', 'hide_editor_wpse_88886' );

function hide_editor_wpse_88886() 
{
    // Not really necessary, but just in case
    if( !isset( $_GET['post'] ) )
        return;

    $template = get_post_meta( $_GET['post'] , '_wp_page_template', true );

    if( 'page-templates/front-page.php' == $template )
    {
        remove_post_type_support( 'page', 'editor' );
    }
}
2
brasofilo