ADD_POST_META不尊重内容

时间:2021-01-25 作者:Carlos B

我 我nsert型 t型h类我s 一nd 我t型 works f我ne:

&#x个A.;
一dd_post型_m级et型一( g级et型_t型h类e_我D(), \'robot型s\', \'TE十、T\', t型rue );&#x个A.;
&#x个A.;

A.ft型er 一dd我ng级 t型h类一t型, 我 ch类eck t型h类e d一t型一b一se 一nd everyt型h类我ng级 我s f我ne, t型h类e result型 我s TE十、T.

&#x个A.;

But型 我f 我 我nsert型 t型h类我s:

&#x个A.;
一dd_post型_m级et型一( g级et型_t型h类e_我D(), \'robot型s\', \'一:2.:{我:0;s:7.:"型;no我ndex个"型;;我:1.;s:8.:"型;nofollow"型;;}\', t型rue );&#x个A.;
&#x个A.;

Th类e result型 我s:

&#x个A.;
s:4.3.:"型;一:2.:{我:0;s:7.:"型;no我ndex个"型;;我:1.;s:8.:"型;nofollow"型;;}"型;;&#x个A.;
&#x个A.;

A.nd 我 need t型h类e result型 t型o be ex个一ct型ly t型h类e s一m级e 一s 我 h类一ve 一dded 我t型:

&#x个A.;
一:2.:{我:0;s:7.:"型;no我ndex个"型;;我:1.;s:8.:"型;nofollow"型;;}&#x个A.;
&#x个A.;

我 need not型 t型o 一ut型om级一t型我c一lly 一dd t型h类一t型 s:4.3.:"型; 一nd t型h类e "型;; 一t型 t型h类e end.

&#x个A.;

C一n 一nybody h类elp m级e ple一se?

&#x个A.;

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

为什么内容没有得到尊重add_post_meta(), 但任何功能add_term_meta()add_user_meta() 使用add_metadata()

值再次序列化的原因是add_metadata() 将使用自动序列化元值maybe_serialize() 它(不幸的是)将序列化该值,即使它已经序列化。

如何解决此问题

在您的情况下,如果可能,请传递一个数组,而不是序列化的值/字符串:

// A non-scalar value will be automatically serialized by maybe_serialize().
$value = array( \'noindex\', \'nofollow\' );

add_post_meta( get_the_ID(), \'robots\', $value, true );
但是,如果您从某处检索/接收到该值,并且在保存时需要保留其精确格式,那么-正如您已经了解的那样-您需要在将该值传递给之前取消序列化该值add_post_meta() 防止双重序列化。

但是在WordPress中,不是使用本机unserialize() 函数,我建议您使用maybe_unserialize() 而是:

$value = \'a:2:{i:0;s:7:"noindex";i:1;s:8:"nofollow";}\';

// Unserialize the value and pass it to add_post_meta().
add_post_meta( get_the_ID(), \'robots\', maybe_unserialize( $value ), true );