无法将php字符串保存到自定义字段

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

我正在想办法保存mp3链接the_content 到自定义字段(使用ACF)。

在中发布the_content 如下所示:

http://feeds.soundcloud.com/stream/347813964-scott-johnson-27-tms-1361-pm.mp3

音频文件的说明

我可以使用提取主题中的mp3链接preg_match_all 但将mp3链接保存到自定义字段比使用PHP提取要好得多。

<?php $pattern = "/(http|https):\\/\\/.*\\/(.*)\\.(mp3|m4a|ogg|wav|wma)/";
$subject = get_the_content();
preg_match_all ($pattern, $subject, $matches);
echo $matches[0][0];?>
以上仅显示mp3链接。下面的代码是我在主题中使用的代码functions.php. 我有一个叫ACF的文本框audio_url 在不保存任何内容的编辑器中,保存帖子时只有一个空白框。

function save_url_link($post_id){
$pattern = "/(http|https):\\/\\/.*\\/(.*)\\.(mp3|m4a|ogg|wav|wma)/";
$subject = get_the_content($post_id);
preg_match_all ($pattern, $subject, $matches);
update_post_meta($post_id, \'audio_url\', $matches[0][0]);}
add_action( \'save_post\', \'save_url_link\' );

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

出于某种原因$subject 调用时变量为空get_the_content($post_id).

使用时save_post 钩子,您可以传递其他参数,如$post$update 回拨您的电话。

对于您的情况,您可以使用第二个参数$post 抓取帖子内容。

Code:

function save_url_link( $post_id, $post ){
    $pattern = "/(http|https):\\/\\/.*\\/(.*)\\.(mp3|m4a|ogg|wav|wma)/";
    $subject = $post->post_content;
    preg_match_all ( $pattern, $subject, $matches );
    update_post_meta( $post_id, \'audio_url\', $matches[0][0] );
}
add_action( \'save_post\', \'save_url_link\', 10, 2 );
上面的代码使用了您实现的逻辑,但有一些不同。

现在我们使用第二个参数$post 在回调中,我们将通过$post->post_content.

  • add_action\'s的第四个参数是回调将采用的参数数。默认值为1. 我们正在使用2 因为我们现在有$post_id$post.

  • 结束