大量の製品、カテゴリ、および属性をwordpressデータベースに挿入しています。
私の方法は、選択したソースデータテーブルをオフラインデータベース(wordpress形式ではない)からwordpressデータベースにコピーし、次のローカルMySQLストアドプロシージャを実行することです。
私の製品とカテゴリは、期待どおりにアップロードおよび表示されているように見えますが、自分の属性を希望どおりに動作させるという仕事の悪魔がいます。
システムに属性がない状態で、次のデータを処理するストアドプロシージャを実行します(ここに表示する目的で要約しました)。
製品 TIDモデル ------ -------------------------- -------- 2パンMP MED SLICE WHITE 800g 3パンMP THICK SLICED WHITE 800g 4パンMPブラウンスライス800g 5パンニンブルホワイト400g 245 TREX 500g
ATTRIBUTES TID Attr_Name Order ------ ----------- -------- 1フェアトレード0 2 GLUTE FREE 0 3マルチパック0
属性値:(SL_ID =ソースデータ製品のTID) TID SL_ID Attr_ID Attr_Value ------ ------ -------- ----------- 5 2 1 NO 6 2 2 NO 7 2 3 NO 2 3 1 YES 3 3 2はい 4 3 3はい 11 4 3 MAYBE 10 4 2 MAYBE 9 4 1 MAYBE 12 5 1はい 13 5 2いいえ 14 5 3 MAYBE 16 245 1はい 17 245 2いいえ
次の各行は、関連するwpテーブル内の関連するデータ行と思われるものを生成する関数(詳細はf_create_attributes)に渡されます。
属性値 INattr_id INattr_name INslug INattr_value --------- ----------- -------- ------------ 1フェアトレード1-はいはい 1フェアトレード1-いいえいいえ 1フェアトレード1-多分MAYBE 2グルテンフリー2はいはい 2グルテンフリー2いいえいいえ 2グルテンフリー2多分MAYBE 3マルチパック3はいはい 3マルチパック3-いいえ 3マルチパック3-多分MAYBE
関数:f_create_attributes
DELIMITER $$ `someth22_martins` $$ DROP FUNCTION IF EXISTS` f_create_attributes` $$ CREATE DEFINER = `someth22_admin` @`% `関数` f_create_attributes`(INattr_id BIGINT(20)、 INattr_name VARCHAR(200)、 INslug VARCHAR(200)、 INattr_value VARCHAR(200))RETURNS BIGINT(20) DETERMINISTIC BEGIN DECLARE OUT_ID BIGINT(20)DEFAULT 0; /* ATRIBUTES ----------------- いくつかのローカル変数を設定 */ SET @attr_id = INattr_id; SET @attr_name = INattr_name; SET @attr_value = INattr_value; SET @ slug = INslug; SET @metakey_attribute = "x_attribute_id_map"; SET @term_id = 0; SET @attr_name_slug = LOWER(REPLACE(@attr_name、 ""、 "-")); /* ここから属性が始まりますlife `wp_woocommerce_attribute_taxonomies` */ INSERT INTO `wp_woocommerce_attribute_taxonomies`(` attribute_name`、 `attribute_label`、` attribute_type`、 `attribute_orderby`、` attribute_public`) SELECT A. * FROM (SELECT @attr_name_slug AS attribute_name、 @attr_name、 "text"、 "menu_order"、0)A LEFT JOIN `wp_woocommerce_attribute_taxonomies` B ON A.attribute_name = B.attribute_name WHERE ISNULL(B.`attribute_id`); /* TERMS --------------------- 属性値 リンク済みTERM TAXONOMY */ INSERT INTO wp_terms( `name`、` slug`、 `term_group`)の関連属性への VALUES(@attr_value、@slug、0) ; /* 用語IDを収集します */ SELECT LAST_INSERT_ID()INTO @term_id; /* 作成TermMeta row */ INSERT INTO `wp_termmeta`(` term_id`、 `meta_key`、` meta_value`) VALUES(@term_id、@metakey_attribute、@attr_value); /* term_taxonomyレコードの作成 */ `wp_term_taxonomy`に挿入(` ter m_id`、 `taxonomy`) VALUES(@term_id、 LOWER( CONCAT(" pa _ "、@ attr_name_slug )) ) ; SET @term_taxonomy_id = 0; SELECT LAST_INSERT_ID()INTO @term_taxonomy_id; /* WOOCOMMERCE termmetaレコードを作成 */ `wp_woocommerce_termmeta`(` woocommerce_term_id`、 `meta_key`、` meta_value`に挿入) VALUES(@term_id、CONCAT( "order_pa _"、@ attr_name_slug)、0); /* term_taxonomymeta行の作成 */ INSERT INTO `wp_taxonomymeta`(` taxonomy_id`、 `meta_key`、` meta_value`) VALUES(@term_taxonomy_id、@metakey_attribute、@attr_id); /* TERM_TAXONOMY_ID */ SELECT @term_taxonomy_id INTO OUT_ID; RETURN OUT_ID; END $$ DELIMITER;
上記の関数で新しい属性を処理した後、次のSQLを使用してWPの新しい属性レコードを表示できます...
SELECT A。*、B。*、C。* #P.`ID` AS `wp_id`、P.`post_title`、Taxonomy AS` Attribute`、 `name` AS` AttrValue` FROM wp_terms A INNER JOIN `wp_term_taxonomy` B ON A.`term_id` = B.`term_id` INNER JOIN` wp_term_relationships` C ON B.`term_taxonomy_id` = C.`term_taxonomy_id` INNER JOIN wp_posts P ON C.`object_id` = P.`ID` WHERE B.`taxonomy` REGEXP "^ pa _";
...そして、私はこの結果を得ます
term_id name slug term_group term_taxonomy_id term_id taxonomy description parent count object_id term_taxonomy_id term_order ------- ------ ------- ------- --- ---------------- ------- -------------- ---------- ------- ------ --------- ---------------- ------------ 558 NO 1-no 0 396 558 pa_fair-trade 0 0 6916 396 0 561 NO 2-no 0 399561 pa_gluten-free 0 0 6916 399 0 564 NO 3 -no 0 402564 pa_multi-pack 0 0 6916 402 0 557はい1-yes 0 395 557 pa_fair-trade 0 0 6917 395 0 560はい2-yes 0 398560 pa_gluten-free 0 0 6917 398 0 563はい3-yes 0 401563 pa_multi-pack 0 0 6917 401 0 559 MAYBE 1-maybe 0 397 559 pa_fair-trade 0 0 6918 397 0 562 MAYBE 2-maybe 0 400 562 pa_gluten-free 0 0 6918 400 0 565 MAYBE 3-maybe 0403565 pa_multi-pack 0 0 6918 403 0 557はい1-はい0 395 557 pa_fair-trade 0 0 6919 395 0 561いいえ2-いいえ0 399 561 pa_gluten-free 0 0 6919 399 0 565 MAYBE 3-maybe 0 403 565 pa_multi-pack 0 0 6919 403 0 557はい1-yes 0 395 557 pa_fair-trade 0 0 6920 395 0 561 NO 2-no 0 399 561 pa_gluten-free 0 0 6920 399 0
これは、関連するwp_postmeta._product_attributes行用に生成したSerialized Arrayの例です
a:3: { s:13: "pa_glute-free"; a:6: {s:4: "name"; s: 13: "pa_glute-free"; s:5: "value"; s:0: ""; s:8: "position"; s:1: "0"; s:10: "is_visible"; i:1; s:12: "is_variation"; i:0; s:11: "is_taxonomy"; i:1; } s:13: "pa_multi-pack"; a:6: {s:4: "name"; s:13: "pa_multi-pack"; s:5: "value"; s:0: ""; s:8: "position"; s:1: "0"; s:10: " is_visible "; i:1; s:12:" is_variation "; i:0; s:11:" is_taxonomy "; i:1;} s:13: "pa_fair-trade"; a:6: {s:4: "name"; s:13: "pa_fair-trade"; s:5: "値 "; s:0:" "; s:8:" position "; s:1:" 0 "; s:10:" is_visible "; i:1; s:12: "is_variation"; i:0; s:11: "is_taxonomy"; i:1;} }
WP管理領域:製品->属性
Name Slug Type用語による順序 属性は現在存在しません。
しかし、管理領域から新しい属性を追加すると、挿入した属性が、手動で追加した属性とともに突然表示されます。
しかし...彼らは用語を表示しません。
ただし、現在手動で作成した属性を削除した場合、画面が更新されると、挿入された属性にリンクされたTERMSが奇跡的に表示されます。
さらに、Webサイトでは、手動でADD/DELETEを実行するまで、属性が製品に対して表示されません。
おそらくここで説明されているようにadd_new_attributeを呼び出すことができます。 github.com/woothemes/woocommerce ..
だから、私は誰かがadd_new_attributeコールが何をするか知っているかどうか尋ねていると思います...
または、属性DELETEリンクの下の呼び出しが行うこと...
a class = "delete" href = "edit.php?post_type = product&page = product_attributes&delete = 84&_wpnonce = e270352083">削除
...注入されたデータを使用して動作させる。
任意の助けに感謝します。
私は自分の質問に答えていると思います。上で詳述した関数の一部としてデータをwp_woocommerce_attribute_taxonomies
にロードした後、属性の配列とそのメタデータを記録し、それをwp_options
にポストする必要があります。wp_options
には、ワードプレスで使用される一連の一時データが含まれます。パフォーマンスを向上させる方法.
次のクエリはうまくいくようです。
/* 属性 --------------- wp_optionsにエントリを投稿してください option_name = "_transient_wc_attribute_taxonomies" このレコードは、ADMIN AREA - > Products - > Attributesインターフェース を設定するために使用され、web - > productsリストページの画面に属性値をポストするために使用されるようです。 */ SET SESSION group_concat_max_len = 10000; SET @RowNo = -1; INSERT INTO `wp_options`(` option_name`、 [option_value`、 `autoload`) SELECT * FROM ( SELECT [.____。" "_ transient_wc_attribute_taxonomies" AS "New_Option_Name`、 CONCAT(" a : "、COUNT(*)、":{"、 GROUP_CONCAT(option_value SEPARATOR" ")、 "} ")AS New_Option_Value、" yes "AS` New_Autoload` [ ]([ ] CONCAT([ "i:"、(@ RowNo:= @RowNo + 1)、 "; O:8:"、 ") ""、 "stdclass"、 "" "、":6: " 、" {S:12: "、" "" "、" attribute_id "、" "" "、"; " "、LENGTH(attribute_id)、": "、" ""、attribute_id、 "" ""、 ";" 、 "S:14:"、 "" ""、 "attrib ute_name "、" "" "、"; s: "、LENGTH(attribute_name)、": "、" "" "、attribute_name、" ""、 ";" 、 "S:15:" 、 "" "、" attribute_label "、" "" "、"; s: "、LENGTH(attribute_label)、": "、" "" "、attribute_label、" ""、 ";" 、 "S:14:"、 "" ""、 "attribute_type"、 "" ""、 "; s:"、LENGTH(attribute_type)、 ":"、 "" "、attribute_type、" "" "、" ; " 、" S:17: "、" "" "、" attribute_orderby "、" "" "、"; s: "、LENGTH(attribute_orderby)、": "、" ""、attribute_orderby 、 "" "、"; " 、" S:16: "、" "" "、" attribute_public "、" "" "、"; s: "、LENGTH(attribute_public)、": " 、 "" "、attribute_public、" "" "、";} " )AS option_value から` wp_woocommerce_attribute_taxonomies` )Calculated_values )Formatted_Values 重複キー更新に関するオプションoption_value = Formatted_Values.New_Option_Value;