Entfernen der Metabox für "Slug", ohne die Funktionalität zu entfernen

7

Hier ist eine interessante Frage.

Ich habe kürzlich bemerkt, dass, wenn Sie den Code verwenden

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

Sie können den Slug tatsächlich nicht ändern, wenn Sie auf den URL-Slug unter dem Seitentitel klicken.

Wenn Sie remove_meta_box für slugdiv verwenden, werden die Metabox und die Bildschirmoptionen entfernt. Sie können jedoch weiterhin auf die URL unter dem Beitragstitel klicken, um sie zu bearbeiten. Wenn Sie jedoch den Beitrag aktualisieren / veröffentlichen Die von Ihnen vorgenommenen Änderungen werden nicht vorgenommen.

Mein Ziel ist es, dieselbe Metabox aus dem Post-Bearbeitungsbildschirm zu entfernen UND sie von der Seite mit den Bildschirmoptionen zu entfernen, ABER ich möchte sicherstellen, dass dies beim Bearbeiten des Slugs unter dem Post-Titel weiterhin funktioniert.

Kann jemand eine Lösung für dieses Problem anbieten? Danke im Voraus.

NetConstructor.com
quelle
Hi @ NetConstructor.com : Ich verstehe Ihre Frage nicht: "Mein Ziel ist es, dieselbe Metabox aus dem Post-Bearbeitungsbildschirm zu entfernen UND sie von der Bildschirmoptionsseite zu entfernen, ABER ich möchte sicherstellen, dass Sie den Slug unter dem Post bearbeiten Titel, dass dies noch funktioniert. " Wie können Sie das Feld bearbeiten, wenn Sie es entfernen? Können Sie umformulieren? Es ist mir überhaupt nicht klar.
MikeSchinkel
@ MikeSchinkel - Ich habe es tatsächlich oben versucht. Wenn Sie sich einen vorhandenen Beitragsbearbeitungsbildschirm ansehen und unter dem Beitragstitel nachsehen, wird eine URL angezeigt. Wenn Sie auf den letzten Teil der URL klicken, können Sie diese bearbeiten. Ich versuche, die zusätzlichen Metabox- und Bildschirmoptionen "SLUG" zu entfernen, aber die unter dem Post-Titel beizubehalten. Ist das sinnvoll?
NetConstructor.com
@NetConstructor - Das ist nur eine Vermutung, aber bitte bestätigen Sie: Vielleicht ist dies nur der Fall, während Ihr Plugin ausgeführt wird? Bitte überprüfen Sie mit einer neuen, sauberen Installation.
hakre
@ MikeSchinkel - Ich habe eine Neuinstallation von Wordpress durchgeführt und festgestellt, dass dies nicht mit dem Plugin zusammenhängt. Mit anderen Worten, auch wenn keine Plugins installiert sind, geschieht dies immer noch. Können Sie dies bitte bestätigen, indem Sie die Slug-Metabox entfernen und versuchen, den Slug zu aktualisieren, indem Sie auf die URL unter dem Titel klicken?
NetConstructor.com

Antworten:

5

Die Box, die die Slug-Edition unter dem Post-Titel ermöglicht, ist tatsächlich an die Slug-Metabox gebunden. Es braucht es, um zu funktionieren. Wenn Sie also die Metabox entfernen, wird sie beschädigt.

Ich denke, die einzige Lösung wäre, Javascript oder CSS zu verwenden, um es zu verbergen. So etwas wird funktionieren:

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'  );
sorich87
quelle
Danke, aber was ist mit dem Ausblenden des Werts "Bildschirmoptionen"?
NetConstructor.com
Dies ist, was dieses Javascript tun wird
sorich87
Wie / wo würde ich diesen Code genau hinzufügen?
NetConstructor.com
2

Am Ende habe ich nur das folgende CSS zu einer CSS-Datei hinzugefügt, die ich in meiner Datei functions.php für den Admin-Bereich aufgerufen habe:

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

#slugdiv { 
    display: none; 
    }

Dadurch wurden sowohl die Bildschirmoptionen als auch die Metabox entfernt, und ich konnte die URL unter dem Titel weiterhin bearbeiten.

AKTUALISIERT

Basierend auf der Antwort von FXFUTURE habe ich seinen Code geändert, indem ich ihn erweitert und die CSS-Werte für Bildschirmoptionen und die Slug-Metabox hinzugefügt habe, wobei sichergestellt wurde, dass der Code nur auf den Seiten post-new.php und post.php enthalten ist.

// 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'  );
NetConstructor.com
quelle
1
Ziemlich alt, aber zum späteren Nachschlagen scheint es, dass Sie heutzutage hinzufügen müssen, !importantdamit es funktioniert.
2

Sie sollten remove_meta_box im Hook add_meta_boxes aufrufen, damit es funktioniert. Es wurde auf 4.0 getestet.

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

function customize_admin_backend_cpt () {
    remove_meta_box( 'slugdiv', 'your_cpt_goes_here', 'normal' );
}
Tolginho
quelle
1

Anstatt Ihre CSS-Datei zu bearbeiten, können Sie dies in Ihrer functions.php verwenden:

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'  );
Zukunft
quelle
GUTE ANTWORT! Kaufen Sie zufällige Kenntnisse, wie Sie das System dazu bringen können, den Inhalt tatsächlich zu entfernen, anstatt ihn nur auszublenden, ohne die Funktion zum Entfernen der Metabox zu verwenden? Ich stecke im Wesentlichen in einer Situation fest, in der ich es lieber entfernen als ausblenden möchte, aber wenn ich die Entfernungsfunktion verwende, kann ich den Slug nicht bearbeiten, wenn ich die URL unter dem Titel bearbeite. Ich kann es bearbeiten, aber wenn ich auf Speichern drücke, kehrt es einfach zu dem zurück, was es vorher war ... Bitte lassen Sie es mich wissen
NetConstructor.com
Ja, Sie sollten es im Hook add_meta_boxes aufrufen. Überprüfen Sie das neueste Beispiel.
Tolginho