2017-07-24 3 views
1

J'essaie d'ajouter un nouveau portfolio de façon pragmatique lorsque j'ajoute une nouvelle catégorie dans WooCommerce.Obtention de l''identifiant de vignette' du terme de la dernière catégorie de produits dans WooCommerce

Mon code est:

function programmatically_create_post() { 

$author_id = 1; 
$taxonomy  = 'product_cat'; 
$orderby  = 'id'; 
$show_count = 0;  // 1 for yes, 0 for no 
$pad_counts = 0;  // 1 for yes, 0 for no 
$hierarchical = 1;  // 1 for yes, 0 for no 
$title  = ''; 
$empty  = 0; 

$args = array(
    'taxonomy'  => $taxonomy, 
    'orderby'  => $orderby, 
    'show_count' => $show_count, 
    'pad_counts' => $pad_counts, 
    'hierarchical' => $hierarchical, 
    'title_li'  => $title, 
    'hide_empty' => $empty 
); 
$all_categories = get_categories($args); 
$lastCategory=end($all_categories); 
$slug =$lastCategory->slug; 
$title=$lastCategory->name; 
$thumbnail_id= get_post_thumbnail_id($lastCategory->id); 

// If the page doesn't already exist, then create it 

if(null == get_page_by_title($title)) { 

// Set the post ID so that we know the post was created successfully 

    $post_id = wp_insert_post(

     array(

      'post_author' => $author_id, 
      'post_name' => $slug, 
      'post_title' => $title, 
      'post_status' => 'publish', 
      'post_type' => 'us_portfolio', 
      'post_parent' =>11, 
      'page_template' =>'custumcat.php', 
      'post_slug'=> $slug 

     ) 

    ); 


    update_post_meta($post_id, '_wp_page_template', 'custumcat.php'); 
    update_post_meta($post_id, '_thumbnail_id', $thumbnail_id); 

// Otherwise, we'll stop 

} else { 

    // Arbitrarily use -2 to indicate that the page with the title already exists 

    $post_id = -2; 

} // end if 
} // end programmatically_create_post 


add_action('create_product_cat', 'programmatically_create_post', 10,2); 

Je veux miniature ensemble du portefeuille de la catégorie miniature, et je l'ai utilisé pour $thumbnail_id= get_post_thumbnail_id($lastCategory->id); get catégorie miniature.

Ensuite, j'ai utilisé update_post_meta($post_id, '_thumbnail_id', $thumbnail_id); pour définir la vignette du portefeuille.

Mais cela ne règle rien.

Comment puis-je résoudre ce problème?

Répondre

1

Mise à jour 2.1

J'ai testé le code ci-dessous et je suis le $thumbnail_id correcte avec aucune erreur:

$categories = get_categories(array(
    'taxonomy'  => 'product_cat', 
    'orderby'  => 'id', 
    'show_count' => 0, 
    'pad_counts' => 0, 
    'hierarchical' => 1, 
    'title_li'  => '', 
    'hide_empty' => 0 
)); 

$last_cat = end($categories); // last category 

$last_cat_term_id = $last_cat->term_id; // Value is 

$thumbnail_id = get_woocommerce_term_meta($last_cat_term_id, 'thumbnail_id', true); 
echo 'Term ID is: ' . $last_cat_term_id . '<br>'; 
echo 'Thumbnail ID is: ' . $thumbnail_id; 

Il affiche la dernière catégorie (avec ces données connexes à mes paramètres de catégories de produits):

Term ID is: 48 
Thumbnail ID is: 443 

Et voici la capture d'écran correspondante de la table DB "wp_termmeta":

// Displays 443 (the correct 'thumbnail_id'set in DB table "wp_termmeta")

Donc cela est testé et fonctionne.

Cette fois, update_post_meta($post_id, '_thumbnail_id', $thumbnail_id); définira correctement une valeur.

...


Mise à jour 1:

catégories de produits sont une taxonomie personnalisée WordPress qui utilise WP_terms ...

Cela ne fonctionne pas parce que $lastCategory->id doesn n'existe pas (Et la sortie d'une valeur null):

$thumbnail_id= get_post_thumbnail_id($lastCategory->id); 

Au lieu de cela vous devez utiliser $lastCategory->term_id qui fonctionnera avec WP_Term objet et get_woocommerce_term_meta() ainsi:

$thumbnail_id= get_woocommerce_term_meta($lastCategory->term_id, 'thumbnail_id', true); 

Les propriétés de l'objet WP_Term sont:

term_id 
name 
slug 
term_group 
term_taxonomy_id 
taxonomy 
description 
parent 
count 

R transporté de joie à terme de catégorie de produit: WooCommerce get attribute thumbnail - Variation Swatches and Photos plugin

+0

Je l'ai édité. Mais il ne corrige pas –

+0

obtenir l'erreur pour get_woocommerce_term_meta. –

+0

Dans phpstorme drow une ligne sur get_woocommerce_term_meta, mais cela fonctionne et je reçois l'ID de la vignette, mais il ne se trouve pas sur la page de portefeuille –

0

Tout d'abord, une catégorie de produits WooCommerce est un taxonomy, pas un post, de sorte que vous ne pouvez pas utiliser la fonction get_post_thumbnail_id() sur elle. Au lieu de cela, vous pouvez utiliser quelque chose comme ceci:

$thumbnail_id = get_woocommerce_term_meta($term_id, 'thumbnail_id', true); 

Deuxièmement, étant donné votre fonction programmatically_create_post est un crochet pour create_product_cat, lorsqu'il est appelé, il reçoit 2 paramètres: term_id $ et term_taxonomy_id $. Il n'y a pas besoin de chercher la catégorie de produits vient d'être créé par toutes ces lignes (get_categories() ne devraient pas travailler, parce que vous travaillez avec les catégories de produits ici, pas des catégories régulières de poste):

$all_categories = get_categories($args); 
$lastCategory=end($all_categories); 

lorsque vous peut simplement déclarer votre fonction comme

function programmatically_create_post($term_id, $tt_id) {...} 

alors simplement d'utiliser le paramètre $term_id:

$lastCategory = get_term($term_id, 'product_cat'); 

assurez-vous un Utiliser également $term_id au lieu de $lastCategory->id.

+0

J'ai édité mon code comme Tu es triste .mais cela ne fonctionne pas et n'ajoute pas de nouvelle catégorie –

+0

S'il vous plaît poster votre code mis à jour ... –