web-dev-qa-db-ja.com

対応するoption_nameとoption_valueがdbに含まれていても、get_option()が機能しない

まず第一に、これはプラグイン特有の問題ではありません。なぜこれが起こるのだろうか?私は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テーブルに値があります。
db has options value

しかし、あなたは何が起こったのかを見ることができます。
showing null

次に、分類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移行を解決するにはどうすればよいですか?

編集2

はい、これはIS理由です。

シリアル化されたURLデータは変更されていますが、それらの文字列数は変更されていません。

1
Mayeenul Islam

さて、最後に、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に感謝します。

1
Mayeenul Islam