2017-04-16 4 views
1

WooCommerceでは、商品名にいくつかの文字を追加したいので、クライアントのQB SKUと一致します。MySQLを使用して特定の製品カテゴリの製品名を追加する

この製品はすべて同じ製品カテゴリの一部です。私は、この哀れな擬似コードのようなことをするために微調整することができるmySqlクエリ/コマンドが期待されています:

テーブルwp_posts内カテゴリ= "製品カテゴリ" PREPEND "abc_"

ありがとうございました。

+0

また、カテゴリがwp_postsテーブルに表示されていないようです... ... ...混乱しています。 –

+0

'Cat1'に属するプロダクト' ProA'をお持ちなら 'Cat1-ProA'に名前を変更する必要がありますか?商品が複数のカテゴリに属する​​場合はどうなりますか? 'ProB'は' Cat1'と 'Cat2'に属し、この場合の商品名は何ですか? –

+0

私が欲しいのは、例えば "xyz"という複数のカテゴリーに属する商品のように、商品カテゴリーに基づいて変更しているため、商品名に「abc_」を追加することです。製品名は変更されますが、カテゴリ/カテゴリは変更されません。 –

答えて

1

UPDATED:私はSQLのエキスパートではありませんが、完全なSQLクエリを構築する方法を理解するのに役立ちます。

次の最後には、一度実行してジョブを実行するカスタム関数があります。

  1. 対応する 'term_taxonomy_id' をチェック(製品カテゴリのIDとして一般的には同じ) "wp_term_taxonomy" の表に
  2. ...あなたの製品カテゴリのIDを取得します。ここで

は、この特定のカテゴリの製品IDの配列を取得する方法である:

global $wpdb; 

// Define HERE the corresponding 'term_taxonomy_id' of your product category. 
$term_taxonomy_id = 11; 

$table_name = $wpdb->prefix . "term_relationships"; 
$product_ids = $wpdb->get_col(" 
    SELECT object_id 
    FROM $table_name 
    WHERE `term_taxonomy_id` = $term_taxonomy_id 
    ORDER BY $table_name.object_id ASC 
"); 

テストされ、そのコードを使用すると、ある機能を行うことができます


の作品あなたがしたいことを達成するつもりです:

function prepending_products_names(){ 

    global $wpdb; 

    // Define HERE the corresponding 'term_taxonomy_id' of your product category. 
    $term_taxonomy_id = 11; 

    $table_name = $wpdb->prefix . "term_relationships"; 
    $product_ids = $wpdb->get_col(" 
     SELECT object_id 
     FROM $table_name 
     WHERE `term_taxonomy_id` = $term_taxonomy_id 
     ORDER BY $table_name.object_id ASC 
    "); 

    foreach($product_ids as $product_id){ 
     // get the post object 
     $post_obj = get_post($product_id); 
     // get the product sku 
     $product_sku = get_post_meta($product_id, '_sku', true); 
     // Customizing the product name 
     // (You can prepend the a part of the sku to it) 
     $custom_product_name = 'abc_'. $post_obj->post_title; 

     // Updating the product name 
     wp_update_post(array(
      'id' => $product_id, 
      'post_title' => $custom_product_name, 
     )); 
    } 
} 

// Run this one time reloading a backend page and comment it 
// (or remove the code aftewards). 

if(is_admin()) 
    prepending_products_names(); 

コードはあなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイル、またはプラグインファイルにも入っています。

このコードはテスト済みであり、動作します。

+0

LoicTheAztec - これは実際のデータベースを更新しますか?私はそれをfunction.phpに残しておきますか? –

+1

@BrockVondはい私の関数はデータベースを更新します:wp_update_post()WordPress関数。しかし、データベースのバックアップやポストテーブル**のバックアップを** **前にする...この方法であなたはそれを安全にテストすることができます。使用後(1回)、取り外してください。この関数は、あなたのサイトのページがブラウズされるときに実行されるので注意してください。... is_admin()で条件を追加してバックエンド(より安全)から実行できます。 – LoicTheAztec

+0

私は最初の実行後にそれを削除しない場合、PHPは何度も何度も項目に接頭辞を追加し続けますか? is_admin()はどこに行きますか?私は管理者であり、バックエンドから(一度でも)実行するだけです。あなたの助けをもう一度感謝します...私は今日/今夜これをテストします。 –

1

あなたは、製品カテゴリに基づいて値を設定するために、これを使用すると

global $post; 
$terms = get_the_terms($post->ID, 'product_cat'); 
foreach ($terms as $term) { 
    $category_id = $term->term_id; 
    break; 
} 

現在の製品カテゴリのIDを取得するには、次のように行います。今

if ($category_id == "1"){ 
     $sku = "your_value_if_current_cat_id_is_2"; 
}elseif ($category_id == "2"){ 
     $sku = "your_value_if_current_cat_id_is_2"; 
}else{ 
     $sku = "your_value_for_all_other_categories"; 
} 

のは、変数$sku

remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 5); 
add_action('woocommerce_single_product_summary', 'woocommerce_my_single_title',5); 

function woocommerce_my_single_title() { 

global $post; 
$terms = get_the_terms($post->ID, 'product_cat'); 
foreach ($terms as $term) { 
    $category_id = $term->term_id; 
    break; 
} 

if ($category_id == "1"){ 
     $sku = "your_value_if_current_cat_id_is_2"; 
}elseif ($category_id == "2"){ 
     $sku = "your_value_if_current_cat_id_is_2"; 
}else{ 
     $sku = "your_value_for_all_other_categories"; 
} 
     ?> 
      <h1 itemprop="name" class="product_title entry-title"><?php the_title(); ?></h1>-<h2><?php echo $sku; ?></h2> 
     <?php 
    } 

あなたのために選択された値が付加された新しいタイトルであなたの現在のタイトルを置き換えるために一緒にこれを入れて、機能をフックしましょう、あなたのfunctions.phpファイル内の関数を入れます

+0

すばらしい答えですが、私はSKU /商品名を置き換えるのではなく、前に付けることを検討しています。ありがとうtho。 –

+1

@BrockVondこれは置き換えられません。これは商品名にSKUを追加します。このコードを削除すると元の状態に戻ります。 –

関連する問題