2012-04-02 3 views
0

私は誰かが私を助けて正しい方向に向けることができたと思っていました。私はWP電子商取引のウェイトフィールドにアクセスして更新する方法を理解しようと1週間を過ごしました.Iveはそれにアクセスして新しい値を更新することに成功しませんでした。シリアル化された配列内のデータにアクセスして更新する際の問題

私が使用しているスクリプトは、漫画本の情報を掻き集めるためにウェブサイトにアクセスしています。次に、xmlファイルからデータを解析し、WP eコマースに固有の値に対して2番目の変数を割り当てます。

スクリプト全体が美しく動作し、各漫画本の製品ページが作成され、すべてのデータが各製品に追加されます。 1つを除いて!私はメタにアクセスして更新する方法を理解しようと1週間は立ち往生していました。これは、weightとweight_unit、およびその中に格納されている他のメタ値の_wpsc_product_metadata配列です。

漫画の重さは約3オンスで、私は "3"と "オンス"を作成したので、この値を各カードに割り当てようとしています。失敗しました。

私は多分、電子商取引コードを掘り下げてネットを調べたり、多次元配列やシリアル化された配列について読んだり、私のノギングをクリックしたりすることはありません。私は過去1ヶ月間PHPでプログラミングしていましたが、1ヵ月前には15年前にCやC++で手を加えたとき以外は何も知りませんでした。それまでは、主に既存のコードをコピーして、MUDS(マルチユーザダンジョン)の出力を変更していました。オンラインゲームがテキストベースであったときに戻ってきました。

は、私が使用してWPのeコマースのメタにアクセスできると仮定:これを達成する

get_post_meta($post_id, '_wpsc_product_metadata', true); That did not work. 

他の方法を私が試した:

get_post_meta(get_the_id($post_id), '_wpsc_product_metadata', true); // no success 

が、私はそうのようにそれを使用して、特定の製品IDを試してみました

get_the_id(300), or just '300', i've used single quotes double quotes no qoutes, "{}", etc etc etc etc 

私が使ったとき:

SKUと価格についての
get_post_meta($post_id, ''); //while in the loop 

値が出力されたが、私はこれを使用する場合次に_wpsc_product_metadata

以内に何されていません。

$product_data['meta'] = array(); 
$product_data['meta'] = maybe_unserialize(get_post_meta('$post_id', '')); 

これは私がしますprint_rたときに取得されるものです

Array ([_wpsc_price] => Array ([0] => Array ([0] => 19.99)) 
[_wpsc_sku] => Array ([0] => Array ([0] => 978-0-7851-5209-5))) 

だから私は特定の製品に行ったもう1つのことを試してみました。手動で5を設定してコードを変更しました:

$product_data['meta'] = array(); 
$product_data['meta'] = maybe_unserialize(get_post_meta('44317', '')); 

これが出力されます:

Array ([_wpsc_stock] => Array ([0] => Array ([0] =>)) 
[_wpsc_product_metadata] => Array ([0] => Array ([0] => 
a:19:{s:25:"wpec_taxes_taxable_amount";s:0:"";s:13:"external_link";s:0: 
"";s:18:"external_link_text";s:0:"";s:20:"external_link_target";s:0:"";s:6: 
"weight";s:3:"0.3";s:11:"weight_unit";s:5:"pound";s:10:"dimensions";a:6: 
{s:6:"height";s:1:"0";s:11:"height_unit";s:2:"in";s:5:"width";s:2:"0 
";s:10:"width_unit";s:2:"in";s:6:"length";s:1:"0";s:11:"length_unit"; 
s:2:"in";}s:8:"shipping";a:{s:5:"local";s:1:"0";s:13:"international";s:1:"0";} 
s:14:"merchant_notes";s:0:"";s:8:"engraved";s:1:"0";s:23: 
"can_have_uploaded_image";s:1:"0";s:15:"enable_comments";s:0:""; 
s:24:"unpublish_when_none_left";s:1:"0";s:11:"no_shipping";s:1:"0";s:16: 
"quantity_limited";s:1:"0";s:7:"special";s:1:"0";s:17:"display_weight_as";s:5: 
"pound";s:16:"table_rate_price";a:2:{s:8:"quantity";a:0:{}s:11:"table_price";a:0: 
{}}s:17:"google_prohibited";s:1:"0";})) [_wpsc_special_price] => Array ([0] => 
Array ([0] => 0)) [_edit_last] => Array ([0] => Array ([0] => 1)) 
[_edit_lock] => Array ([0] => Array ([0] => 1333358836:1)) [_wpsc_sku] => 
Array ([0] => Array ([0] => 978-0-7851-6421-0)) [_wpsc_price] => Array 
([0] => Array ([0] => 24.99)) [_wpsc_is_donation] => Array ([0] => Array ( 
[0] => 0)) [_wpsc_currency] => Array ([0] => Array ([0] => a:0:{}))) 

私は私が誰かが私を啓発することができるように記憶され、このデータにアクセスして更新する方法私を見るかもしれないと物ごいいや、期待していました_wpsc_product_metadata具体的にはweightとweight_unitであり、あなたが知っていれば新しく作成されたポストウェイトを値に更新し、デフォルトのweight_unitをポンドからオンスに変更する例を示すことができます。あまりにも長い間にプログラムされていないと、ごく最近のあなたは非常によくやっているように見えるんPHPに見た人のために

<?php 
    function scraping_comic() 
    { 
     $html = file_get_html('http://site-to-strip.com/'); 
     $matches = str_replace (' ', ' ', $article); 

     foreach($html->find('li.browse_result') as $article) 
     { 
      // get comic title 
      $item['title'] = trim($article->find('h4', 0)->find('span',0)->outertext); 
      // get comic title url 
      $item['title_url'] = trim($article->find('h4', 0)->find('a.grid-hidden',0)->href); 
      // get comic image 
      $item['image_url'] = trim($article->find('img.main_thumb',0)->src); 
      // get comic excerpt 
      $item['excerpt'] = trim($article->find('p.browse_result_description_release', 0)->plaintext); 
      // get comic sales info 
      $item['on_sale'] = trim($article->find('.browse_comics_release_dates', 0)->plaintext); 
      // strip numbers and punctuations 
      $item['title2'] = trim(preg_replace("/[^A-Za-z-\t\n\s]/","",$article->find('h4',0)->find('span',0)->plaintext)); 
      $item['title3'] = trim(preg_replace("/[^A-Za-z]/","",$article->find('h4',0)->find('span',0)->plaintext)); 
      $ret[] = $item; 
     } 
     $html->clear(); 
     unset($html); 
     return $ret; 
    } 

    $ret = scraping_comic(); 
    if (! empty($ret)) 
    { 
     foreach($ret as $v) 
     { 
      //download the image 
      $url = $v['image_url']; 
      $title = $v['title3']; 
      $now = time(); 
      $num = date("w"); 
      if ($num == 0) 
      { $sub = 6; } 
      else { $sub = ($num-1); } 
      $WeekMon = mktime(0, 0, 0, date("m", $now) , date("d", $now)-$sub, date("Y", $now)); 
      $todayh = getdate($WeekMon); 
      $d = $todayh[mday]; 
      $m = $todayh[mon]; 
      $y = $todayh[year]; 
      $date_stamp = $d.$m.$y; 

      //scrape inside pages 
      $scrape = 'http://domain.com'; 
      $comic_details = $v['title_url']; 
      $comic_details_url = $scrape.$comic_details; 
      $url2 = file_get_html($comic_details_url); 

      foreach($url2->find('.comics_detail_lead_left_panel_content') as $the_details); 
      $matches = str_replace (' ', ' ', $the_details); 
      { 
       $item2['image2_url'] = trim($the_details->find('img.frame-img',0)->src); 
       $item2['full_desc'] = trim($the_details->find('p',0)->plaintext); 
       $item2['data'] = trim($the_details->find('dl',0)->plaintext); 
      } 

      $url2->clear(); 
      unset($url2);       

      //download medium-sized image 
      $root2 = ('/home/****/public_html/wp-content/blogs.dir/14/files/comics/' .$title.$date_stamp. '-medium.jpg'); 
      $image2 = $item2['image2_url']; 
      copy($image2, $root2); 

      unset($root2); 
      unset($image2); 

      //match specific data and assign variables 
      $string = $item2['data']; 
      $number = preg_match("/(Comic|Hardcover|Paperback)[^A-Za-z]+/", $string, $fields); 
      switch ($fields[1]) 
      { 
       case ('Comic'): 
        $cat = array(51, 52); 
        break; 
       case ('Hardcover'): 
        $cat = array(85, 52); 
        break; 
       case ('Paperback'): 
        $cat = array(95, 52); 
        break; 
       default: ""; 
      } 

      $number = preg_match("/((January)|(February)|(March)|(April)|(May)|(June)|(July)|(August)|(September)|(October)|(November)|(December))[^A-Za-z0-9,]+[A-Za-z0-9,\s]+/", $string, $fields); 
      $date = $fields[0]; 
      $number = preg_match("/((UPC)|(ISBN))[^0-9-]+([0-9-]+)/", $string, $fields); 
      $upc = $fields[4]; 
      $number = preg_match("/((Price))[^0-9.]+([0-9.\s]+)/", $string, $fields); 
      $price = $fields[3]; 

      $full_desc = $item2['full_desc']; 
      $maintitle = $v['title']; 
      $excerpt = $v['excerpt']; 

      $comic_post = array(); 
      $comic_post['post_title'] = wp_strip_all_tags($maintitle); 

      $comic_post['post_content'] = wp_strip_all_tags($full_desc); 
      $comic_post['post_status'] = 'publish'; 
      $comic_post['post_author'] = 1; 
      $comic_post['post_type'] = 'wpsc-product'; 
      $comic_post['post_category'] = $cat; 
      $comic_post['comment_status'] = 'closed'; 
      $comic_post['ping_status'] = 'closed'; 
      $comic_post['post_excerpt'] = wp_strip_all_tags($excerpt);  

      // create comic book 
      $post_id = wp_insert_post($comic_post); 
      // category insertion does not work fixed this by calling wp_set_post_terms 
      wp_set_post_terms($post_id, $cat, 'wpsc_product_category'); 

      $wpsc_custom = update_post_meta; 
      $wpsc_custom($post_id, '_wpsc_price', $price); 
      $wpsc_custom($post_id, '_wpsc_sku', $upc); 

      //Gain access to WP Ecommerce meta data and assign new values to weight ***IN PROGRESS*** 
      $product_data['meta'] = array(); 
      $product_data['meta'] = maybe_unserialize(get_post_meta($post_id, '')); 

      //***TESTING***// 
      echo '<br /> the data <br />'; 
      print_r($product_data['meta']); 

      //Set featured image for product 
      $filename = ('comics/' .$title .$date_stamp. '-medium.jpg'); 
      update_post_meta($post_ID, 'image_thumbnail', $imgloc); 
      set_featured_image($post_id, $filename); 
     } 
    } 
    else { echo 'Could not scrape site!'; } 
?> 

答えて

1

WP Eコマース投稿者の助けを借りて、ここでは重量を更新するパズルピースがありません。

if(!isset($product_data['meta']) || !is_array($product_data['meta'])) { 
    $product_data['meta'] = array(); 
} 

if(!isset($product_data['meta']['_wpsc_product_metadata'])) { 
    $product_data['meta']['_wpsc_product_metadata'] = 
maybe_unserialize(get_post_meta($post_id, '_wpsc_product_metadata', true)); 
} 

if(!is_array($product_data['meta']['_wpsc_product_metadata'])) { 
    $product_data['meta']['_wpsc_product_metadata'] = array(); 
} 

$product_data['meta']['_wpsc_product_metadata']['weight_unit'] = 'ounce'; 
$product_data['meta']['_wpsc_product_metadata']['weight'] = 0.19; 

update_post_meta($post_id, '_wpsc_product_metadata', $product_data['meta']['_wpsc_product_metadata']); 
0

:ここ

は参照用のコードです。

アレイについて。 _wpsc_product_metadataはJSONのようです。 PHPマニュアル、特に以下にリンクされているJSONに関するセクションを参照してください。

http://php.net/manual/en/book.json.php

あなたはjson_decodeを使用する場合は、あなたがオブジェクトのプロパティとして必要な属性を持つオブジェクトを取得することができるようになります。

+0

私は、BBSの日にMajorMUDを再生するためのスクリプトをプログラムすることに慣れていました。私はまだ覚えている "少し"ビット、いくつかのものはよく知られていると私はかなりの質問をしてきました。私はたった4時間寝ていて、プログラミング、読書、学習、食べること、そして残りの時間を寝かせているということだけを覚えているという事実について言います。 ... Json_decodeへの読み込み中です...オブジェクトが作成された後にループに入っている間にオブジェクトにアクセスする必要があり、手動で入力した特定の投稿に「where」を照会すると_wpsc_product_metadataの内容しか表示されません重さ。 –

+0

WPのように見えます。電子商取引は、手動でデータを入力するまで_wpsc_product_metadataを割り当てません。そのポストのテーブルが作成されます。確信はないけど。 –

+0

jsonがjsonでセットアップされている場合にjsonのみが動作するので、if(json_decode($ product_data ['meta'])== NULL)のチェッカーを実行しました。結果のエラーは警告です:json_decode()は、パラメータ1が配列であると想定しています。私がアクセスする必要があるメタデータは配列内にあるので、これがどのように役立つかわかりません。出力は有効なjsonではありませんでした。何か不足していますか? –

関連する問題