まず第一に、これはプラグイン特有の問題ではありません。なぜこれが起こるのだろうか?私はoptions
テーブルを使って分類法メタを保存するために@ bainternetのTax Meta Classを使っています。私はlocalhost(XAMPP Windows 5.5.19環境)から自分のコンテンツをアップロードしました。私は自分のデータをオプションテーブルに見つけました。すべてがうまくいっていました。
今、私は自分のサイトをサーバーにアップロードし(Linux | PHP 5.2.17)、optionsテーブルからデータを取得するのに失敗しています。
$type_icon_array = get_tax_meta( $type->term_id, 'offer_type_icon' );
var_dump( $type->term_id ); //showing the id nicely
var_dump( $type_icon_array ); //showing null
関数はデータの取得に失敗しました。機能は次のとおりです。
//get term meta field
public function get_tax_meta($term_id,$key,$multi = false){
$t_id = (is_object($term_id))? $term_id->term_id: $term_id;
$m = get_option( 'tax_meta_'.$t_id);
if (isset($m[$key])){
return $m[$key];
}else{
return '';
}
}
私はTax Meta機能を迂回して、WP基本を試してみました。
$tst1 = get_option( 'tax_meta_6' );
var_dump($tst1); //showing null
ご覧のとおり、データベースはoptions
テーブルに値があります。
しかし、あなたは何が起こったのかを見ることができます。
次に、分類ID#2で1つの画像(リモートサーバーにいる間)をアップロードしました。画像がそこに表示されていることがわかります。
値がdbにあるのに、get_option()
がその値を持っていないというのであれば、ここで何が起こる可能性がありますか? (ただし、その特定の環境のフィールドを更新している間は動作しています)私も試してみました。
get_option( 'tax_meta_6', array() );
運なしで! :(
私はWordPressの最小要件がPHP 5.2.4であることを知っていますが、その欠けている開発者はそうすることができます。バージョンは、そのような虐殺を引き起こしますか?
私はこのが/がが起こる理由を見つけました。私のローカルデータは次のとおりです。
a: 1: {
s: 15: "offer_type_icon";
a: 2: {
s: 2: "id";
s: 3: "428";
s: 3: "url";
s: 61: "http://localhost/example/wp-content/uploads/2015/04/image.png";
}
}
すべてのベースURLを置き換えてサーバーにアップロードすると、サーバーデータは次のようになります。
a: 1: {
s: 15: "offer_type_icon";
a: 2: {
s: 2: "id";
s: 3: "428";
s: 3: "url";
s: 61: "http://example.com/wp-content/uploads/2015/04/image.png";
}
}
URLは変更されていますが、変更されたURLの文字列数はlocalhostと同じです。しかし、新しいベースURLは17文字少ないので44
になります。
これが原因である場合、dbがサイトURLでデータをシリアル化している間にそのようなWP移行を解決するにはどうすればよいですか?
はい、これはIS理由です。
シリアル化されたURLデータは変更されていますが、それらの文字列数は変更されていません。
さて、最後に、site_urlが存在するシリアル化されたデータが、ローカルURLからサーバーURLへのローカルURLからサーバーURLへのデータの移行中に問題を引き起こしていることがわかりました。
私は2つの解決策を見つけました、両方ともまだテストされていません:
自分のリスクで試してくださいと言う必要はありません。
すべての前に
BACK/あなたのデータベースが最初に
さて、最初のものはoptions
テーブルにのみ特定されていて、あまり柔軟ではなく、また信頼できません(WTFLicensed:p)。それで私はPau Iglesiasによって2番目のものと一緒に行きました。
私はそれがうまく働いているのがわかりました。しかし、私はWindowsユーザーなので、Shellスクリプトを使うことができなかったので、私は彼のレポを分岐させ、同じスクリプトを使って私自身の方法を作った。
私のものを使うのは少し厳しいです。エクスポートした文字列で置き換えられた.sql
ファイルを、serialization-fixer.php
があるsameフォルダに配置する必要があります。次に、ファイルを開いて21行目を.sql
ファイルのファイル名に変更します。その後は、ブラウザからファイルを実行するだけです。
Niceスクリプトを書いてくれたPau Iglesiasに感謝します。