即使数据库包含相应的OPTION_NAME和OPTION_VALUE,Get_Option()也不起作用

时间:2015-04-21 作者:Mayeenul Islam

首先,这不是特定于插件的问题。我想知道为什么会发生这种情况?我正在使用@bainternet的Tax Meta类保存分类法Meta,使用options 桌子我从localhost(XAMPP Windows 5.5.19环境)上传了我的内容,我在选项表中找到了我的数据。一切正常。

现在我将我的站点上载到服务器(Linux | PHP 5.2.17),它无法从选项表中检索数据。

$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元函数,尝试了WP的基本功能:

$tst1 = get_option( \'tax_meta_6\' );
var_dump($tst1); //showing null
如您所见,数据库的值为options 表格:
db has options value

但你可以看到发生了什么:
showing null

然后,我在Taxonomy ID#2中上载了一个图像(我在远程服务器上时),您可以看到该图像显示在那里。

这里会发生什么,值以db为单位,但是get_option() 没有那个价值?(但在我更新that particular environment) 我甚至试过:

get_option( \'tax_meta_6\', array() );
没有运气!:(

我知道WordPress的最低要求是PHP 5.2.4,但缺少开发版本会导致这样的大屠杀吗?

编辑我找到了这样做的原因COULD/MIGHT 发生:我检查了本地和服务器序列化数据,发现其中有一点不匹配,假设我的本地数据是:

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的相同。但它应该是44 因为新的基本URL少了17个字符。

如果这是原因,那么当db使用站点URL序列化数据时,如何解决此类WP迁移?

编辑2

YES, this IS the reason.

序列化的URL数据正在更改,但其字符串计数没有更改。

1 个回复
最合适的回答,由SO网友:Mayeenul Islam 整理而成

好的,最后发现,存在site\\u url的序列化数据导致了问题,而我正在将数据从localhost迁移到服务器,将本地url替换为服务器url。

我找到了两种解决方案,都尚未测试:

  • PHP Serialization Fix for WordPress Migrations (& other applications like Expression Engine) 作者:David CoveneyFix-Serialization (脚本以固定序列化字符串中的长度属性)-作者:Pau Iglesias无需这样说,try them with your own risk.

    在所有内容之前编辑BACK UP 首先是您的数据库

    好吧,我发现第一个只针对options 表,灵活性不强,也不可靠(WTFLicensed:p)。所以我选择了保罗·伊格莱西亚斯的第二个。

    我发现它工作得很好。但由于我是Windows用户,无法使用shell脚本,因此我将他的repo分叉,并使用相同的脚本实现了我自己的方式:

    • serialization-fixer - 原始PHP方式-github使用我的方式有点特定于服务器。您需要替换导出的字符串.sql 将文件归档到same 文件夹,其中serialization-fixer.php 是然后,您需要打开文件并用.sql 文件名。之后,您只需从浏览器运行该文件。

      多亏了保罗·伊格莱西亚斯出色的剧本。

结束

相关推荐

Color Picker - Theme options

我一直在自己创造一个主题,只是教自己wordpress API的输入和输出。首先,这个地方对我很有用!现在来回答这个问题,最近刚刚将WordPress颜色选择器合并到我的主题选项中,我想知道是否有办法操纵颜色输出来影响CSS的某些部分。例如我使用主题选项中的颜色选择器选项来更改网站标题的颜色。我只想知道颜色输出的确切位置,以及它如何影响特定的CSS。