防止自定义字段在首次发布后更新

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

我需要帮助防止自定义字段在第一次发布后被更新。

我有一些帖子,其中有一个mp3文件的链接和该文件的描述。发布时,我有一个函数,可以从内容中删除指向mp3文件的链接,并将其添加到一个名为audio_url.

如果我更改帖子,自定义字段中的mp3链接将被删除。

my中的代码functions.php:

function save_url_link( $post_id, $post ){
if ( has_post_format(\'audio\', $post_id)) {
if (! wp_is_post_revision( $post_id ) ){
  preg_match_all ( "/(http|https):\\/\\/.*\\/(.*)\\.(mp3|m4a|ogg|wav|wma)/", $post->post_content, $matches );
  update_post_meta( $post_id, \'audio_url\', $matches[0][0] ); 
}
  remove_action(\'save_post\', \'save_url_link\', 10, 2);
  wp_update_post(array(\'ID\' => $post_id, \'post_content\' => preg_replace(\'/(http|https):\\/\\/.*\\/(.*)\\.(mp3|m4a|ogg|wav|wma)/\', "", $post->post_content)));
}
}

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

您正在更新audio\\u url,无论是否在内容中找到。让它有条件:

if(preg_match_all ( "/(http|https):\\/\\/.*\\/(.*)\\.(mp3|m4a|ogg|wav|wma)/", $post->post_content, $matches )) {
    update_post_meta( $post_id, \'audio_url\', $matches[0][0] ); 
}
在这种情况下,您还可以使用preg\\u match,因为您只查找一个实例。

还要确保您的正则表达式工作正常。现在,如果文档中有两个URL,就会得到错误的结果,因为“.*”是贪婪的,会尽可能匹配。添加?将这种行为转变为不贪婪。现在,让我们不再需要使用不同的分隔符来转义每个斜杠:

"!(http|https)://.*?/(.*?)\\.(mp3|m4a|ogg|wav|wma)!"
你不需要在那一秒周围加括号.*?, 但也许你有更多需要它的代码?此外,(http | https)还可以写为https?, 问号使前一个字符成为可选字符。

结束

相关推荐

Functions.php中的入队样式

这对我没用functions.php: if( is_page_template( \'template-flat.php\' ) ) { function flatsome_scripts() { wp_enqueue_style( \'flatsome-style\', get_template_directory_uri() .\'/flatash/css/foundation.css\', array(), \'2.1\', \'all\'); }