web-dev-qa-db-fra.com

La page du plugin Wordpress est en cours de chargement dans un conteneur de contenu administratif au lieu d'une page séparée

Je crée un plugin wordpress qui a sa propre interface utilisateur. Cela ressemble à une application Web standard, de sorte que tout ce qui est fait dans le plugin est géré dans cette interface utilisateur au lieu de l'intégrer à la zone WP admin. Mon problème semble être que je ne peux pas le charger en tant que page séparée, je ne peux que le charger dans une page créée dans la zone d'administration avec l'interface utilisateur intégrée au bloc de contenu. Quand je l'ajoute au menu comme ceci:

// Add plugin UI submenu item
add_submenu_page(
    'myPlugin', 'myPlugin WP', __('myPlugin UI', 'myPlugin'),
    $capability, 'myPlugin-ui', 'myPlugin_router'
);

Et le faire accéder à la page en tant que telle:

    function myPlugin_router() {

        // Get current screen details
        $screen = get_current_screen();

    if(strpos($screen->base, 'myPlugin-ui') !== false) {
            include(DS_ROOT_PATH.'/views/myPlugin-ui.php');

    }
}

Est-ce parce que j'utilise "include" pour l'ajouter, de sorte qu'il est chargé comme modèle?

Je prévois également d’utiliser cette interface utilisateur de la même manière que l’administrateur wordpress, et de charger des pages séparées à l’intérieur de la zone de contenu de l’interface utilisateur, exactement comme le fait WP sur mon interface utilisateur. Donc, il utilise des modèles. Aurais-je juste utiliser include comme ci-dessus pour le faire?

1
user1632018

Je commencerai par dire que je pense que c'est une très mauvaise idée, mais vous pouvez contourner l'interface utilisateur de l'administrateur en accrochant une action qui se produit après l'initialisation des choses, mais avant que toute sortie ne se produise:

function my_admin_ui(){
    if( isset( $_GET['page'] )
        && 'myPlugin-ui' == $_GET['page'] ){
            include( plugin_dir_path( __FILE__ ) . 'views/myPlugin-ui.php' );
            exit;
    }
}
add_action( 'admin_init', 'my_admin_ui', 999 );
2
Milo