web-dev-qa-db-fra.com

Masquer certaines pages/publications sur wp-admin, afficher un filtre personnalisé

J'intègre un CMS distinct pour le commerce électronique dans un thème wordpress, en utilisant des modèles de page pour certaines pages telles que les pages de panier, de recherche et de paiement.

Cela fonctionne assez bien jusqu'à présent. Cependant, il y a quelques pages dynamiques pour lesquelles je créerais normalement un modèle mono-posttype.php, mais je ne peux pas car dans ce cas, je ne peux pas, car Wordpress ne les "sait" pas, car les données vient du CMS ecommerce. Par exemple, la page de détails du produit ou une page de recherche de catégorie de produit.

Ma solution consistait à créer un modèle appelé détails du produit et à en créer une page. Dans ce modèle, les données réelles de la page wordpress sont ignorées et les données sont plutôt lues à partir du CMS de commerce électronique.

J’ai l’impression que ce n’est pas une bonne pratique, mais, à moins d’écrire une intégration complète du système de commerce électronique par plug-in Wordpress, c’est le meilleur que je puisse trouver.

TL; DR

Le problème que cela me laisse, c'est que si un administrateur supprimait cette page ou désassignait le modèle, le magasin se briserait. Je souhaite donc masquer ces pages pour éviter toute suppression ou modification accidentelle (le contenu de la page n'a pas d'importance pour elles).

Existe-t-il un moyen de masquer certaines pages du menu "Toutes les pages" dans wp-admin, à moins de cliquer sur un filtre personnalisé ("Pages système", par exemple)?

1
jammypeach

Vous pouvez le faire en utilisant pre_get_posts () qui ajustera la requête avant son exécution. Par conséquent, nous pouvons exclure des pages de la requête.

function wpse_hide_special_pages($query) {

    // Make sure we're in the admin and it's the main query
    if ( !is_admin() && !is_main_query() ) {
        return;
    }

    // Set the ID of your user so you can see see the pages
    $your_id = 1;

    // If it's you that is logged in then return
    if ($your_id == get_current_user_id()) {
        return;
    }

    global $typenow;

    // Only do this for pages
    if ( 'page' == $typenow) {

        // Don't show the special pages (get the IDs of the pages and replace these)
        $query->set( 'post__not_in', array('8', '15', '14', '22') );
        return;

    }

}
add_action('pre_get_posts', 'wpse_hide_special_pages');

J'espère que cela pourra aider.

3
Steven Jones

Bryan Gentry a également décrit une approche différente consistant à gérer les fonctions de corbeille et de suppression spécialement pour les pages souhaitées, de sorte qu'elles ne puissent être supprimées que par le plug-in, ici: how-to-prevent-a- wordpress-page-de-être-supprimé-par-un-utilisateur

0
Damian Green