Vous avez sans doute vu des thèmes et des plugins WordPress qui prétendent installer automatiquement des “ données factices ” pour vous lorsque vous les installez, de sorte que vous ayez immédiatement un site Web entièrement fonctionnel. Je vais vous montrer une méthode pour y parvenir en utilisant uniquement les fonctions PHP.

Cela peut être utile si:

  • Votre thème ou plugin nécessite certains articles ou pages.
  • Vous souhaitez fournir une installation factice premium comme décrit ci-dessus.
  • Vous souhaitez automatiser la création d’articles.
  • Vous voulez juste apprendre.

Dans ce tutoriel, nous allons créer une fonction simple pour débutant pour obtenir une solution de travail “ rapide et sale ”. Plus tard, dans un didacticiel différent, nous apprendrons comment étendre ce que nous n’avons pas appris ici pour créer un système de publication robuste et facile à utiliser.

Pour ceux d’entre vous qui préfèrent jouer avec du code préexistant au lieu de lire tous les tutoriels, voici notre dernière fonction avec un exemple de son utilisation et des notes.

if ( ! function_exists( 'PostCreator' ) ) {

    function PostCreator(
        $name      = 'AUTO POST',
        $type      = 'post',
        $content   = 'DUMMY CONTENT',
        $category  = array(1,2),
        $template  = NULL,
        $author_id = '1',
        $status    = 'publish'
    ) {

        define( POST_NAME, $name );
        define( POST_TYPE, $type );
        define( POST_CONTENT, $content );
        define( POST_CATEGORY, $category );
        define( POST_TEMPLATE, '' );
        define( POST_AUTH_ID, $author_id );
        define( POST_STATUS, $status );

        if ( $type == 'page' ) {
            $post      = get_page_by_title( POST_NAME, 'OBJECT', $type );
            $post_id   = $post->ID;
            $post_data = get_page( $post_id );
            define( POST_TEMPLATE, $template );
        } else {
            $post      = get_page_by_title( POST_NAME, 'OBJECT', $type );
            $post_id   = $post->ID;
            $post_data = get_post( $post_id );
        }

        function hbt_create_post() {
            $post_data = array(
                'post_title'    => wp_strip_all_tags( POST_NAME ),
                'post_content'  => POST_CONTENT,
                'post_status'   => POST_STATUS,
                'post_type'     => POST_TYPE,
                'post_author'   => POST_AUTH_ID,
                'post_category' => POST_CATEGORY,
                'page_template' => POST_TEMPLATE
            );
            wp_insert_post( $post_data, $error_obj );
        }

        if ( ! isset( $post ) ) {
            add_action( 'admin_init', 'hbt_create_post' );
            return $error_obj;
        }

    }
}

/* All available options for PostCreator()

PostCreator( 'TITLE' , 'POST TYPE' , 'POST CONTENT' , 'POST CATEGORY' , 'TEMPLATE FILE NAME' , 'AUTHOR ID NUMBER' , 'POST STATUS');

TITLE - HTML Stripped Out. Simple String.
POST TYPE - Post type slug. Eg 'post' or 'page'. Custom Post Types are supported.
POST CONTENT - Content of the Post/Page. HTML allowed.
POST CATEGORY - An array of the integer ID's of the category/categories you want to link to your post
TEMPLATE FILE NAME - File name of the template. Only for Pages. In the format 'file_name.php'.
AUTHOR ID NUMBER - Integer value. Default is 1.
POST STATUS - Available options; [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ]

If successful, PostCreator() returns nothing.
If there is an error PostCreator() returns a WP_error object.

*/

PostCreator( 'My Lorem Ipsum', 'page', 'With a sizable serving of Dolor. This was created using Harri Bell-Thomas's PostCreator function.' );

GUIDE ÉTAPE PAR ÉTAPE

Nous allons créer une fonction PHP appelée PostCreator (), et nous en aurons besoin pour prendre certains paramètres. Chaque paramètre a reçu une valeur par défaut, donc techniquement, lors de l’appel de la fonction, vous n’avez pas besoin de spécifier l’un d’entre eux, mais bon, où est le plaisir?

function PostCreator(

    $name      = 'AUTO POST',
    $type      = 'post',
    $content   = 'DUMMY CONTENT',
    $category  = array(1,2),
    $template  = NULL,
    $author_id = '1',
    $status    = 'publish'
) {

    // function output here

}

Ensuite, je vais définir certaines constantes nécessaires pour la fonction intégrée suivante. (Cela pourrait être réécrit pour ne pas utiliser de constantes, mais je les ai utilisées car je les trouve utiles lors de l’extension de la fonction de base PostCreator (), mais c’est une histoire pour un autre tutoriel.

define( POST_NAME, $name );
define( POST_TYPE, $type );
define( POST_CONTENT, $content );
define( POST_CATEGORY, $category );
define( POST_TEMPLATE, '' );
define( POST_AUTH_ID, $author_id );
define( POST_STATUS, $status );

OK, jusqu’ici tout va bien. Maintenant, j’ai inclus une validation pour empêcher la génération de messages / pages en double (ce qui est un cauchemar, croyez-moi!). Cette validation vérifie si une publication / page avec le même nom existe déjà. Si c’est le cas, il n’en crée pas un nouveau, mais si ce n’est pas le cas, il le crée pour vous.

La raison pour laquelle j’ai choisi de vérifier le titre de l’article est que c’est tout ce dont WordPress a besoin pour générer une page (le reste est généré automatiquement). D’autres moyens d’effectuer cette validation incluent la vérification par rapport aux «slugs» ou aux identifiants de publication. Nous reviendrons sur tout cela dans un prochain tutoriel.

Ceci est particulièrement utile si l’article / la page est requis par votre plugin ou thème. J’ai d’abord développé ceci pour l’un de mes plugins car il fallait qu’une page soit présente avec un certain modèle de page. Avec cette fonction, j’ai simplement gardé PostCreator () est WordPress ” admin_init ‘, ce qui signifie que si quelqu’un essayait de le supprimer (comment osent-ils!), Alors il serait recréé immédiatement pour éviter les problèmes avec le reste du plugin.

Gardez à l’esprit que personne ne veut que son blog soit détourné, alors assurez-vous de lui dire clairement ce qui se passe et peut-être lui offrir la possibilité de le désactiver.

Revenons maintenant à la validation. Voici le prochain morceau de code.

if ( $type == 'page' ) {
    $post      = get_page_by_title( POST_NAME, 'OBJECT', $type );
    $post_id   = $post->ID;
    $post_data = get_page( $post_id );
    define( POST_TEMPLATE, $template );
} else {
    $post      = get_page_by_title( POST_NAME, 'OBJECT', $type );
    $post_id   = $post->ID;
    $post_data = get_post( $post_id );
}

Alors qu’est-ce qui se passe ici?

Eh bien, c’est essentiellement le même processus répété deux fois. Je fais cela en raison de la façon dont les articles et les pages sont traités légèrement différemment. De plus, la constante POST_TEMPLATE n’est définie que si vous essayez de créer une page, car seules les pages peuvent accepter ce paramètre (c’est-à-dire qu’il sera ignoré si vous essayez de créer un article standard).

Sur la première ligne de la clause IF (son nom technique est «apodosis» si vous ne le saviez pas déjà), la variable $ post est définie. S’il y a un article / une page avec le même nom que celui qui tente d’être créé, alors $ post est rempli avec les données de l’entrée existante (en tant qu’objet, pas en tant que tableau, mais cela peut être changé si absolument nécessaire). Cette variable est utilisée pour tester si votre titre est unique. Les deux lignes suivantes que j’ai incluses car, encore une fois, elles sont très utiles si vous souhaitez étendre cette fonction. Un exemple de ceci pourrait être la mise à jour du message existant s’il existe déjà.

Vient ensuite notre fonction imbriquée qui sera ajoutée au hook ‘admin_head’. C’est ici;

function hbt_create_post() {
    $post_data = array(
        'post_title'    => wp_strip_all_tags( POST_NAME ),
        'post_content'  => POST_CONTENT,
        'post_status'   => POST_STATUS,
        'post_type'     => POST_TYPE,
        'post_author'   => POST_AUTH_ID,
        'post_category' => POST_CATEGORY,
        'page_template' => POST_TEMPLATE
    );
    wp_insert_post( $post_data, $error_obj );
}

Simplement, cela utilise la fonction intégrée de WordPress (wp_insert_post) pour générer notre article / page. Nous remplissons $ post_data avec un tableau de nos paramètres (vous pouvez voir nos constantes utilisées ici). Ceci est créé et s’il y a une erreur, cela génère une valeur booléenne $ error_obj. TRUE = Un problème. FALSE = Tout va bien. La dernière chose à faire est d’exécuter la fonction précédente sur la tête d’administration, mais uniquement si elle réussit la validation, et de renvoyer l’objet d’erreur.

if ( ! isset( $post ) ) {
    add_action( 'admin_init', 'hbt_create_post' );
    return $error_obj;
}

Génial! Maintenant, nous avons créé notre fonction géniale, utilisons-la!

USAGE

Incluez simplement la fonction PostCreator () et exécutez-la.

Cela fonctionnera en utilisant les valeurs par défaut, mais que faire si nous voulons la personnalisation? Ensuite, nous utilisons nos paramètres.

PostCreator(
    'TITLE',
    'POST TYPE',
    'POST CONTENT',
    'POST CATEGORY',
    'TEMPLATE FILE NAME',
    'AUTHOR ID NUMBER',
    'POST STATUS'
);

Avec toutes ces options, faites attention en utilisant des apostrophes. Assurez-vous que si vous souhaitez utiliser une apostrophe (à l’exception de celles entourant les paramètres eux-mêmes), vous la préfixez avec une barre oblique inverse. Par exemple;

PostCreator( 'Alex's Post' );

Le paramètre TITLE accepte une valeur de chaîne. Ceci est dépourvu de balises HTML.

Le paramètre POST TYPE accepte le slug du type de publication, par exemple; «post» ou «page». Les types de publication personnalisés sont pris en charge.

PostCreator( 'Alex's Post', 'page' );

Le POST CONTENT ‘accepte une valeur de chaîne. Ce sera le contenu de la publication / page créée. Le HTML est autorisé ici.

PostCreator( 'Alex's Post', 'page', 'The force is strong with this one…' );

La CATEGORIE POST accepte un tableau d’entiers. Les nombres entiers correspondent à l’ID de la / des catégories attribuées à l’article / à la page.

PostCreator( 'Alex's Post', 'page' , 'The force is strong with this one…' , array( 1, 2 ) );

Le TEMPLATE FILE NAME est une valeur de chaîne définissant le modèle de page souhaité de votre nouvelle page. Cela ne fonctionne que pour les pages. Le format sera; ‘nom_fichier.php’.

PostCreator(
    'Alex's Post',
    page',
    'The force is strong with this one…',
    array( 1, 2 ) ,
    'fullwidth_page.php'
);

Le NUMÉRO D’IDENTIFICATION DE L’AUTEUR est une valeur entière de l’ID de l’auteur.

PostCreator(
    'Alex's Post',
    'page',
    'The force is strong with this one…',
    array( 1, 2 ) ,
    'fullwidth_page.php',
    '1'
);

Le STATUT DE POST vous permet de définir l’état de la publication / page créée. Par défaut, il est «publié».

Options disponibles; [ ‘draft’ | ‘publish’ | ‘pending’| ‘future’ | ‘private’ | custom registered status ]

PostCreator(
    'Alex's Post',
    'page',
    'The force is strong with this one…',
    array( 1, 2 ) ,
    'fullwidth_page.php',
    '1',
    'publish'
);

CONCLUSION

WordPress est un outil exceptionnellement puissant, mais peut parfois être indiscipliné. J’espère que vous trouverez ce simple extrait utile, peut-être en apprenant une ou deux choses en cours de route. Restez à l’écoute pour le prochain où je vais convertir ce que nous avons déjà fait dans cet article en une classe PHP, en ajoutant plus de fonctionnalités et de stabilité. Pour un aperçu, consultez le code sur Github: PostController

Si vous avez des questions, posez-les simplement dans la section commentaires ci-dessous.

Share: