WordPress : Comment attribuer une Catégorie à une Page, quand les deux sont créées à l’initiation du thème ?

Publié par Jean-Michel le

Je termine le travail sur mon thème. Même si c’est pour un usage personnel je souhaite automatiser la création de certaines pages essentielles, afin qu’elle soit déjà fonctionnelle à l’activation.

J’ai ajouté le code suivant à mon functions.php, et la catégorie et la page sont créées avec succès. Cependant, il n’y a pas d’attribution automatique de la catégorie à la page nouvellement créée. Je compte sur le plug-in Ajouter des catégories aux pages pour cette fonctionnalité, et je soupçonne que c’est la raison pour laquelle il ne fonctionne pas correctement.

// let's create some stuff on init
    if (isset($_GET['activated']) && is_admin())       //check for init
    {    

        // create categories 
        if (file_exists (ABSPATH.'/wp-admin/includes/taxonomy.php')) 
            {
                require_once (ABSPATH.'/wp-admin/includes/taxonomy.php');    
                if (!get_cat_ID('plants')) {wp_create_category('plants');}
            }

        // create pages
        if (get_page_by_title('potato') == NULL)       //check if page exists
        {
           $new_page_title = 'potato';

             $post_cat = get_term_by('name', 'plants', 'category');
             $post_cat = $post_cat->term_id;

           $new_page_content = 'coming soon';
               //$new_page_template = 'template-page-with-subnav.php';
           $post_parent = '';
           $page_check = get_page_by_title($new_page_title);

           $new_page = array(
                   'post_type'     => 'page',
                 'post_category'   => $post_cat,
                   'post_title'    => $new_page_title,
                   'post_content'  => $new_page_content,
                   'post_status'   => 'publish',
                   'post_author'   => 1,
                   'post_parent'   => $post_parent, );
           if(!isset($page_check->ID))
              {
                $new_page_id = wp_insert_post($new_page);
                if(!empty($new_page_template))
                {update_post_meta($new_page_id, '_wp_page_template', $new_page_template);}
              }

        }

    }

Après avoir activé le thème, j’ai créé la catégorie et la page attendues, mais aucun lien entre elles.

Lire également:  Wordpress : Oxygen Builder avec thème dans WordPress

Solution n°1 trouvée

compris comment accomplir ma tâche:

// function to fetch tag ID from name
   function get_tag_ID($tag_name) 
   { $tag = get_term_by('name', $tag_name, 'post_tag'); if ($tag) { return $tag->term_id; } else { return NULL;}    }

// add categories & tag taxonomy to pages
   register_taxonomy_for_object_type( 'category', 'page' );
   register_taxonomy_for_object_type( 'post_tag', 'page' ); 

// let's create some stuff on init
    if (isset($_GET['activated']) && is_admin())       //check for init
    {  
        // create categories & tags
        if (file_exists (ABSPATH.'/wp-admin/includes/taxonomy.php'))
            {
                require_once (ABSPATH.'/wp-admin/includes/taxonomy.php'); 
                // categories
                $check = get_cat_ID('plants'); if(empty($check)) {wp_create_category('plants');}
                $check = get_cat_ID('animals'); if(empty($check)) {wp_create_category('animals');}

                //tags
                $check = get_tag_ID('tall'); if (empty($check)) {wp_create_tag('tall');}
                $check = get_tag_ID('short'); if (empty($check)) {wp_create_tag('short');}
            }

        // create pages
        $new_page_title = 'carrot';          // define PAGE TITLE
        $new_page_cat   = 'plants';          // define PAGE CATEGORY
        $new_page_tag   = array('tall');     // define PAGE TAGS

        $page_check = get_page_by_title($new_page_title);
        if(!isset($page_check->ID))           // verify new page is unique
            {
            $new_page = array(
            'post_type'     => 'page',
            'post_title'    => $new_page_title,
            'post_content'  => 'more coming soon',
            'post_status'   => 'publish',
            'post_author'   => 1,
            'post_parent'   => '', );

            $post_cat = get_term_by('name', $new_page_cat, 'category');
            $post_cat = $post_cat->term_id;
            $new_page_cat = array($post_cat);

            $new_page_id = wp_insert_post($new_page);                   // create page
            wp_set_post_categories( $new_page_id,$new_page_cat, true ); // set category
            wp_set_post_tags( $new_page_id,$new_page_tag, true );       // set tags 
            }

    }

@Milo, merci pour votre aide 🙂

Lire également:  Comment changer le contenu présenté en une balise différente dans Wordpress Twenty Fourteen ?

pour ceux qui cherchent à faire la même chose sur l’activation de leur thème, ce code fonctionne plutôt bien dans tous les tests que j’ai fait : vérifie que les catégories et tags à créer n’existent pas déjà, vérifie que la page à créer n’existe pas t existe déjà. la création de page fonctionne et relie correctement la catégorie et la balise à la page créée. toutes les relations correctes apparaissent lorsque vous regardez votre index de catégories ou de balises, donc toute recherche par l’un ou l’autre devrait fonctionner correctement.

Lire également:  Wordpress : Comment supprimer le CSS d'un thème enfant ?

après l’activation du thème, vous pouvez utiliser la fonction get_tag_ID() ailleurs dans WP.

Les pages seront désormais enregistrées pour les taxonomies de catégorie et de balise, bien qu’un codage ou un plug-in soit nécessaire pour fournir des métaboxes d’administration .

à votre santé.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *