我有一个功能,可以从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 );
最合适的回答,由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
. 它不会运行两次,因此无需移除它。