web-dev-qa-db-fra.com

Supprimer Metabox pour "Slug" sans supprimer de fonctionnalité

Voici une question intéressante.

J'ai récemment remarqué que si vous utilisez le code

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

vous ne pouvez réellement pas modifier le slug lorsque vous cliquez sur le slug d’URL sous le titre de la page.

Pour clarifier, lorsque vous utilisez remove_meta_box pour le slugdiv, la metabox et les options d’écran sont supprimés, mais vous pouvez toujours cliquer sur l’URL sous le titre du post pour le modifier ... Cependant, lorsque vous allez mettre à jour/publier le post quelle que soit la modification que vous avez faite ne prend pas.

Mon objectif est de supprimer la même métabox de l'écran d'édition et de la supprimer de la page d'options d'écran MAIS je veux m'assurer que, lorsque vous modifiez le slug sous le titre de l'article, cela fonctionne toujours.

Quelqu'un peut-il fournir une solution à ce problème? Merci d'avance.

7
NetConstructor.com

J'ai fini par ajouter le CSS suivant à un fichier css que j'appelais dans mon fichier functions.php pour la zone d'administration:

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

#slugdiv { 
    display: none; 
    }

Cela supprimait les options d’écran et la metabox tout en me permettant de modifier l’URL sous le titre.

MIS À JOUR

Sur la base de la réponse fournie par FXFUTURE, j'ai modifié son code en l'étendant et en incluant les valeurs CSS pour les options d'écran et la metabox slug tout en veillant à ce que le code soit uniquement inclus sur les pages post-new.php et post.php.

// 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
NetConstructor.com

La case qui permet l'édition slug sous le titre du post est en fait liée à la metabox slug. Il en a besoin pour fonctionner. Donc, enlever le metabox le casserait.

Je pense que la seule solution serait d’utiliser javascript ou css pour le cacher. Quelque chose comme ça va marcher:

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

Vous devez appeler remove_meta_box dans le hook add_meta_boxes pour le faire fonctionner. Il a testé sur 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

Plutôt que d’éditer votre fichier css, vous pouvez l’utiliser dans votre fichier 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