web-dev-qa-db-fra.com

get_option () ne fonctionne pas même la base de données contient le nom d'option et la valeur d'option correspondants

Tout d’abord, ce n’est pas un problème spécifique au plugin. Je me demande pourquoi cela pourrait arriver? J'utilise Tax Meta Class de @bainternet pour enregistrer Taxa Meta à l'aide de la table options. J'ai téléchargé mon contenu de localhost (environnement XAMPP Windows 5.5.19), j'ai trouvé mes données dans le tableau des options. Tout fonctionnait bien.

Maintenant, j'ai téléchargé mon site sur le serveur (Linux | PHP 5.2.17) et la récupération des données dans la table d'options a échoué.

$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

La fonction n'a pas réussi à récupérer les données. Comment la fonction est:

//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 '';
    }
  }

Je contourne les fonctions de méta-taxe et essaie le WP rudimentaire:

$tst1 = get_option( 'tax_meta_6' );
var_dump($tst1); //showing null

Comme vous pouvez le constater, la base de données a la valeur dans la table options:
db has options value

Mais vous pouvez voir ce qui s'est passé:
showing null

J'ai ensuite chargé une image (alors que je suis sur le serveur distant) dans l'ID de taxonomie n ° 2, et vous pouvez voir que l'image y est affichée.

Que pourrait-il arriver ici, que la valeur est en db, mais que get_option() n’ait pas cette valeur? (Mais cela fonctionne pendant que je mets à jour le champ dans cet environnement particulier ) J'ai même essayé:

get_option( 'tax_meta_6', array() );

sans chance! :(

Je sais que la configuration minimale requise par WordPress est PHP 5.2.4, mais est-ce que le développeur manquant peut le faire? version causer un tel massacre?


Modifier

J'ai trouvé une raison pour laquelle cePOURRAIT/POURRAITse produire: j'ai vérifié les données sérialisées du serveur local et du serveur et y ai trouvé une petite incompatibilité, supposons que mes données locales soient:

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";
    }
}

Lorsque je télécharge sur le serveur en remplaçant toute l'URL de base, les données du serveur deviennent:

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";
    }
}

L'URL change mais le nombre de chaînes pour l'URL modifiée reste identique à celui de localhost. Mais cela devrait être 44 car la nouvelle URL de base compte moins de 17 caractères.

Si tel est le cas, comment puis-je résoudre cette migration WP alors que la base de données contient des données sérialisées avec l'URL du site?

EDIT 2

OUI, ceci IS la raison.

Les données d'URL sérialisées sont en cours de modification, mais leur nombre de chaînes ne l'est pas.

1
Mayeenul Islam

Enfin, nous avons enfin découvert que les données sérialisées, où existe un site_url, sont à l'origine du problème lorsque je migre les données de localhost vers serveur, en remplacement de l'URL locale par l'URL du serveur.

J'ai trouvé deux solutions, les deux ne sont pas encore testés:

Besoin de ne pas dire que, essayez-les avec votre propre risque .

MODIFIER

AVANT TOUT
BACK UP VOTRE BASE DE DONNEES AVANT TOUT

Ok, j’ai trouvé le premier uniquement spécifique à la table options et peu souple et peu fiable (WTFLicensed: p). Alors je suis allé avec le second par Pau Iglesias.

J'ai trouvé que ça fonctionnait bien. Mais comme je suis un utilisateur Windows, je ne pouvais pas utiliser de script Shell, alors j'ai créé son référentiel et me suis débrouillé à l'aide du même script:

Utiliser mon seul est un peu spécifique à un serveur. Vous devrez placer votre fichier .sql remplacé par une chaîne exporté dans le dossier same où se trouve le serialization-fixer.php. Ensuite, vous devez ouvrir le fichier et modifier la ligne 21 avec le nom de fichier de votre .sql. Ensuite, vous pouvez simplement exécuter le fichier à partir de votre navigateur.

Merci à (Pau Iglesias) pour ses jolis scripts.

1
Mayeenul Islam