WordPress : Comment attribuer une Catégorie à une Page, quand les deux sont créées à l’initiation du thème ?
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é.
0 commentaire