it-swarm-eu.dev

Jak mohu upravit schopnost potřebovat pro přístup k možnosti?

Mám následující 3 různé role : Admin, Editor a SEO. Nainstaloval jsem WordPress SEO od Yoast, a chci to získat:

  • Nechci, aby redaktoři viděli možnosti SEO , protože pouze psali příspěvky a neví o SEO. Optimalizaci provede osoba s rolí SEO.
  • Nechci, aby SEO osoba viděla další pluginy . Chci jen mít stejné možnosti, které Editors, ale s povolenými SEO funkcemi.

Snažil jsem se s některými úryvky z tohoto webu, a jsem schopen skrýt meta box do Editors, ale není malý 'rating box' přes Publikovat tlačítko .

Také nevím, jak se vypořádat s druhým bodem, protože všechny pluginy používají stejnou schopnost manage_options, takže nemohu přiřadit tuto schopnost k roli SEO. A Nevím, jak změnit potřebné schopnosti bez úpravy souborů pluginů (co se ztratí na aktualizaci pluginu).

Díky předem.

5
EliasNS

Možná to není nejlepší metoda, protože poskytuje editoru přístup k Nastavení a Možnosti, ale to, co to dělá, dává konkrétnímu editoru (na základě ID uživatele) oprávnění upravovat možnosti. Pak otestujeme, zda načítáme jednu ze šablon možností, pokud jsme a ID uživatele je stejné ID, které jsme udělili, zabili proces a vyplnili zprávu.

1) Tak první věc je první, vytvořit si SEO uživatele a přiřadit mu roli editoru.

2) Dále musíme dát tomuto uživateli možnost manage_options. Můžete to najít úpravou uživatele a prohlížením adresy URL, mělo by to být jeden z posledních parametrů v adrese URL.

/** Give our SEO Guy Permissions **/
function give_seo_yoastToast() {
    $user = new WP_User( $seo_user_id );
    $user->add_cap( 'manage_options');
}
add_action( 'admin_init', 'give_seo_yoastToast');

3) Nyní se musíme ujistit, že všechny naše SEO dudeski nemají přístup k žádné z kritických možností. Podle mých informací jsou níže uvedené stránky jediným způsobem, jak tento uživatel může upravovat důležité informace. Pokud si tyto stránky prohlížejí, zabijeme je a vyplníme zprávu, neváhejte změnit zprávu.

/** Remove Access to Certain Pages **/
add_action( 'load-options-general.php', 'prevent_seoguy_access' );
add_action( 'load-options-writing.php', 'prevent_seoguy_access' );
add_action( 'load-options-reading.php', 'prevent_seoguy_access' );
add_action( 'load-options-discussion.php', 'prevent_seoguy_access' );
add_action( 'load-options-media.php', 'prevent_seoguy_access' );
add_action( 'load-options-permalink.php', 'prevent_seoguy_access' );
add_action( 'load-options.php', 'prevent_seoguy_access' );
function prevent_seoguy_access(){
    $currID = is_user_logged_in() ? get_current_user_id() : 0;

    if($currID == $seo_user_id ){
        wp_die("There was a hole here once, it's gone now.");
        exit();
    }
}

4) Právě teď může prohlížet stránky v menu, ale když k nim přistupuje, vidí zprávu výše. Stejně jako další krok, pojďme tuto stránku z naší nabídky odstranit. Vezměte prosím na vědomí, že pokud odstraníte stránku nabídky bez výše uvedené funkce, může důvtipný uživatel přejít přímo na libovolnou stránku s možnostmi prostřednictvím adresy URL.

/** Remove Settings Menu Page from SEO Guy **/
function seo_guy_menu() {
    if(!current_user_can('administrator')){
        remove_menu_page('options-general.php');
    }
}
add_action('admin_menu', 'seo_guy_menu');

5) A jste hotovi!

Bohužel, jak jste uvedl ve své otázce, Yoast nevypadá, že má schopnost dát uživateli konkrétní povolení ke všem SEO věci, aniž by jim zbytečné další oprávnění, stejně jako jaký druh saje. A na další sidenote byste mohli místo toho, aby se místo statického $seo_user_id vytvořil místo SEO role, přidělte této roli editoru oprávnění spolu s výše uvedeným. To je trochu více práce (ne příliš mnoho), ale pokud máte pouze 1 chlap dělá vaše SEO navždy pak výše uvedená metoda je v pořádku myslím.

4
Howdy_McGee

Nejlepším způsobem, jak změnit schopnost, kterou uživatelé potřebují k zobrazení stránek nastavení Yoast SEO, je použití filtru wpseo_manage_options_capability.

Zde je příklad, jak je tento způsob použit (umístěn ve vašem souboru functions.php):

/**
 * Return the capability that users need to view the Yoast SEO settings pages.
 *
 * @return mixed|void
 */
function my_custom_wpseo_manage_options_capability() {

    $manage_options_cap = 'edit_others_posts';

    return $manage_options_cap;
}
add_filter( 'wpseo_manage_options_capability', 'my_custom_wpseo_manage_options_capability' );

Ve výše uvedeném příkladu se používá schopnost edit_others_posts, takže (ve výchozí instalaci WordPress) mohou editátoři i administrátoři přistupovat k nastavení Yoast SEO.

Ve vašem případě, kdy si nepřejete, aby měli „normální“ editátoři přístup, budete muset vytvořit novou roli (např. „SEO“), která má stejné možnosti jako editor, plus další vlastní funkce (tj. manage_wpseo_options), lze použít ve výše uvedené funkci namísto edit_others_posts.

Zásuvka Členové Justin Tadlock vám umožní snadno vytvořit nové role a schopnosti.

Poznámka: Toto nemusí fungovat na Multisite kvůli tomuto problému .


Update: V Yoast SEO v5.5 + byl filtr wpseo_manage_options_capability přejmenován na wpseo_manage_options.

4
Matt Sims

Našel jsem velmi jednoduché řešení. Pokud jste tak ještě neučinili, nainstalujte některý z modulů pro správu funkcí. Poté vytvořte novou funkci v rámci správce schopností - volejte ji jako "CUSTOM_CAPABILITY_NAME" nebo co chcete. Pak jej přiřaďte konkrétní roli nebo uživateli.

Důležité : kopírování a zálohování a soubor, který chcete upravit v případě, že f * ck up, můžete vždy obnovit původní.

Pak na skutečném serveru musíte změnit adresáře dolů na wp-content/plugins/a pak grep a najít všechny soubory, které mají 'manage_options'.

Příklad: grep 'manage_options' */*

Tricky část, budete muset najít hlavní funkce, která přidá menu nebo submenu na palubní desku. Zde jsou dva příklady pro Yoast SEO specifický přístup.

$manage_options_cap = apply_filters( 'wpseo_manage_options_capability', 'CUSTOM_CAPABILITY_NAME' );


add_submenu_page( 'wpseo_dashboard', __( 'WooCommerce SEO Settings', 'yoast-woo-seo' ), __( 'WooCommerce SEO', 'yoast-woo-seo' ), 'CUSTOM_CAPABILITY_NAME', $this->short_name, array(

PS - nemění nic, co začíná '$' - to je proměnná. :)

1
Fabian