web-dev-qa-db-ja.com

機能を削除せずに "Slug"のMetaboxを削除

これは興味深い質問です。

私は最近あなたがコードを利用するならば気づいた

remove_meta_box('slugdiv', 'post', 'normal'); 

ページタイトルの下のURLスラッグをクリックしても、スラッグを変更することはできません。

わかりやすくするために、slugdivにremove_meta_boxを使用すると、メタボックスと画面​​オプションは削除されますが、投稿タイトルの下のURLをクリックして編集することはできます。どのような変更を加えてもかかりません。

私の目的は、投稿編集画面から同じメタボックスを削除し、画面オプションページから削除することです。ただし、投稿タイトルの下のスラッグを編集するときに、これが機能することを確認します。

誰もがこの問題に対する解決策を提供できますか?前もって感謝します。

7

管理領域用のfunctions.phpファイルで呼び出していたCSSファイルに次のCSSを追加しました。

[for="slugdiv-hide"] { 
    display: none; 
    }

#slugdiv { 
    display: none; 
    }

それでも私はタイトルの下のURLを編集することができますが、これはスクリーンオプションとメタボックスの両方を削除しました。

更新しました

FXFUTUREの回答に基づいて、コードをpost-new.phpおよびpost.phpページにのみ含まれるようにしながら、それを拡張し、画面オプションのcss値とスラッグメタボックスを含めることによって、コードを変更しました。

// HIDE THE SLUG METABOX AND SLUG SCREEN OPTIONS
   function hide_slug_options() {
    global $post;
    global $pagenow;
    $hide_slugs = "<style type=\"text/css\">#slugdiv, #edit-slug-box, [for=\"slugdiv-hide\"] { display: none; }</style>\n";
    if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php') print($hide_slugs);
   }
   add_action( 'admin_head', 'hide_slug_options'  );
2

ポストタイトルの下のスラッグ編集を可能にするボックスは、実際にはスラッグメタボックスに関連付けられています。それは動作する必要があります。そのため、メタボックスを削除すると壊れます。

唯一の解決策は、それを隠すためにjavascriptまたはcssを使用することであると思います。このような何かがうまくいくでしょう:

function hide_slug_box() {
    global $post;
    global $pagenow;
    if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php') {
        echo "<script type='text/javascript'>
            jQuery(document).ready(function($) {
                jQuery('#edit-slug-box').hide();
            });
            </script>
        ";
    }
}
add_action( 'admin_head', 'hide_slug_box'  );
5
sorich87

動作させるにはadd_meta_boxesフックでremove_meta_boxを呼び出す必要があります。 4.0でテストしました。

add_action( 'add_meta_boxes', 'customize_admin_backend_cpt',0 );

function customize_admin_backend_cpt () {
    remove_meta_box( 'slugdiv', 'your_cpt_goes_here', 'normal' );
}
2
tolginho

あなたのcssファイルを編集するよりむしろあなたはあなたのfunctions.phpの中でこれを使うことができます:

function hide_all_slugs() {
global $post;
$hide_slugs = "<style type=\"text/css\"> #slugdiv, #edit-slug-box { display: none; }</style>";
print($hide_slugs);
}
add_action( 'admin_head', 'hide_all_slugs'  );
1
fxfuture