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.

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 🙂

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.

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 *