web-dev-qa-db-fra.com

Créer une page via un plugin

Mon problème est d'afficher une liste de produits lus à partir de tables de base de données. Je sais comment les lire et je peux produire le tableau, mais en utilisant uniquement un shortcode intégré dans une page que j'ai créée via WP.

Je veux que le plugin lui-même crée une page avec ma table à l'intérieur, et que cette page soit mise à la disposition des utilisateurs WP via un élément de menu (pas le menu administrateur).

Quelle est la bonne façon?

2
picus

Vous pouvez créer la page via wp_insert_post( $post, $wp_error );. Le array $post contient les données de votre page, avec la documentation complète ici .

Assurez-vous de recevoir l'ID de votre page/publication insérée. Vous pouvez ajouter la page à l'activation de votre plugin, mais veuillez d'abord vérifier si l'option de la page est déjà définie (peut-être depuis une installation précédente), car vous pouvez ignorer la création de la page dans ce cas:

function your_plugin_activate() {

    if ( !get_option( 'your_plugin_page_id' ) ) { // check if the option is already set

        $post = array(); //insert your postdata into this array
        $mypageid = wp_insert_post( $post ); // create the page/post
        update_option( 'your_plugin_page_id', $mypageid ); // set the option in the database for future reference
    }

}
register_activation_hook( __FILE__, 'your_plugin_activate' );

Cela va dans votre fichier de plugin.

Vous pouvez enregistrer cet ID dans vos options de plug-in et l'utiliser pour filtrer automatiquement le contenu et insérer votre tableau. Bien sûr, vous pouvez aussi simplement insérer le shortcode que vous utilisez directement dans le post_content, mais en utilisant

add_filter( 'the_content', 'your_table_function_name' );

function your_table_function_name( $content ) {

    if ( $GLOBALS['post']->ID == get_option( 'your_plugin_page_id' ) ) { // check if you are on the right page
        $content = $your_table_code . $content; // Set the Table in front of the User Content
    }
    return $content; // return the content, any other page returns the original content.

}

vous donne l'avantage d'être indépendant de l'entrée de l'utilisateur, puisqu'un shortcode défectueux pourrait empêcher l'affichage de la table.

N'oubliez pas qu'il serait très avantageux pour l'utilisateur de lui donner le choix de choisir une page existante à filtrer ou de créer automatiquement une nouvelle page, ainsi que de présenter une option permettant de modifier cette page. Si vous avez enregistré l'ID de votre nouvelle page, cela ne devrait pas vous demander trop d'effort :)

1
fischi