如何检查PHP字符串是否与元字段不同?

时间:2017-10-23 作者:Gregory Schultz

我有一个功能,可以从the_content 并将其保存为一个名为audio_url 然后从中删除mp3链接the_content. 我需要帮助的是如果the_content 具有新的mp3链接,需要使用新的mp3链接更新自定义字段。我尝试了很多选项,它要么不会更新,要么会删除写入自定义字段的数据

我的功能代码:

function save_url_link( $post_id, $post ){
// only works if the post is an audio post format
if ( has_post_format(\'audio\', $post_id)) {
// look for either http or https mp3, m4a, ogg, wav or wma files
$pattern = "/(http|https):\\/\\/.*\\/(.*)\\.(mp3|m4a|ogg|wav|wma)/";
// php the removes all except the mp3 link
preg_match_all($pattern,$post->post_content,$matches);
// saves the mp3 link to a string
$audio_raw = $matches[0][0];
// check if meta field is empty
if (get_post_meta( $post_id, \'audio_url\', true ) == \'\') {
  // update the meta field
  update_post_meta( $post_id, \'audio_url\', $audio_raw ); 
  // removes the save action
  remove_action(\'save_post\', \'save_url_link\', 10, 2);
  // update the content without the mp3 link
  wp_update_post(array(\'ID\' => $post_id,\'post_excerpt\'=>$audio_raw,\'post_content\' => preg_replace(\'/(http|https):\\/\\/.*\\/(.*)\\.(mp3|m4a|ogg|wav|wma)/\', "", $post->post_content)));  
// close and save
};}}
add_action( \'save_post\', \'save_url_link\', 10, 2 );

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

我想它在内容中没有URL时删除了该值,因此$audio\\u raw为空。

if ($audio_raw && get_post_meta( $post_id, \'audio_url\', true ) != $audio_raw) {
  // update the meta field
  update_post_meta( $post_id, \'audio_url\', $audio_raw ); 
}
检查$audio\\u raw是否为false/null/empty,以及$audio\\u raw是否与当前所在的字符串不同audio_url.

顺便说一句,我很确定

remove_action(\'save_post\', \'save_url_link\', 10, 2);
实际上对任何事情都没有影响,因为当你从save_post. 它不会运行两次,因此无需移除它。

结束