it-swarm.com.de

Meta-Boxen für Nicht-Administratoren ausblenden

Ich habe eine überprüfungsbasierte WordPress-Site, auf der ich für jedes Unternehmen eine Seite habe, auf der die Benutzer sie überprüfen können. Das Thema, das ich verwende, fügt einen benutzerdefinierten Beitragstyp mit dem Namen "Überprüfung" hinzu, und ich habe mit "Press Permit" eingeschränkte Benutzerkonten erstellt, mit denen einige Teile dieser Überprüfungsseiten geändert werden können.

Ich wollte einige der Meta-Boxen verstecken, auf die sie keinen Zugriff haben sollten, z. B. Yoast SEO, Gd Star Ratings usw. Ich habe die Anweisungen einiger anderer Posts auf dieser Website befolgt, aber die Meta-Boxen werden nicht wie gewünscht ausgeblendet .

Ich habe den folgenden Code am Ende der "functions.php" in mein Theme-Verzeichnis eingefügt, wie unter WordPress SEO von Yoast beschrieben: Meta-Felder in Beiträgen für Nicht-Administratoren ausblenden

add_action('add_meta_boxes', 'hide_yoastseo_metabox', 99);

function hide_yoastseo_metabox()
{
    if (!current_user_can('activate_plugins'))
    {
        remove_meta_box('wpseo_meta', 'review', 'normal');
    }
}
2
Aidan Knight

Hilft es, die Priorität Ihrer add_action() herabzusetzen? Dies wurde von Kid Slimmer und Piet in dem Post erwähnt, den Sie verlinkt haben Ihnen in diesem Kommentar → https://wordpress.stackexchange.com/a/91184/33604

In ihrem Codebeispiel wird anstelle von 10000 die Priorität 99 verwendet. Aktualisieren Sie zunächst Ihre Priorität auf 500 oder 1000, und prüfen Sie, ob sich etwas ändert.

Sie können auch besseres Glück finden, indem Sie die Benutzerfunktionen überprüfen, bevor Sie die Aktion selbst hinzufügen. Dies wurde auch in dem oben verlinkten Kommentar demonstriert.

So könnte zum Beispiel so etwas etwas besser funktionieren:

if( ! current_user_can('activate_plugins') ) {
    add_action('add_meta_boxes', 'hide_yoastseo_metabox', 1000);
}

function hide_yoastseo_metabox() {
    remove_meta_box('wpseo_meta', 'review', 'normal');
}

Abgesehen von diesen Empfehlungen könnte ich mir nur vorstellen, alle Ihre Werte auf remove_meta_box() zu überprüfen. Stellen Sie sicher, dass 'wpseo_meta' die richtige Metabox-ID für die Yoast-Metabox ist, die Sie entfernen möchten. 'review' ist der richtige Beitragstyp dass Sie die Metabox ausblenden möchten und 'normal' die richtige Priorität für die Metabox hat, auf die Sie abzielen. Weitere Informationen zu remove_meta_box()finden Sie hier .

Auch , um Ihre Intelligenz hier nicht zu beleidigen, aber ich bin neugierig: Greifen Sie auf Ihre Bearbeitungsbildschirme für Überprüfungsposttypen in verschiedenen Fähigkeitsstufen zu? Wenn Sie nur Dinge in Ihrem Administrator über Ihr Superadmin-Konto mit allen Funktionen anzeigen, wird Code, der nur für Konten mit eingeschränkten Funktionen gilt, nicht für Sie ausgeführt. Stellen Sie sicher, dass Sie ein Testkonto mit den eingeschränkten Funktionen haben, die Sie testen, und versuchen Sie, die Elemente in diesem Konto anzuzeigen.

1
George G.
function your_function() {
    global $current_user;
    if($current_user->roles[0] == 'administrator') {
        add_meta_box(your parameters);
        // fill in your parameters
    }
}
add_action('admin_init','your_function');
0
Owais Alam