我正在尝试编写一个函数,该函数将使用带有Wordpress音频短代码的.mp3 URL覆盖任何<a>
标签。
我要从api将帖子拉到Wordpress中-因此,我无法将音频简短代码手动添加到每个帖子中的mp3链接中,甚至无法在自己的行上放置mp3 URL,这会自动生成该简短代码。这些帖子是广播故事。每个标签都以<a>
标签开头,其结构完全如下:
<a href="https:storyurl.mp3" class="asset-audio">Hear the radio version of this story.</a>
我相信这就是我需要将该标签转换为:
[audio mp3="https:storyurl.mp3" class="asset-audio" title="Hear the radio version of this story."]
有些音频播放器插件可以识别任何mp3并将其包装在其自己的短代码中,但是Wordpress默认情况下不会使用其核心mediaelement.js来执行此操作。我希望在我的孩子主题的functions.php中实现这一目标。
答案 0 :(得分:1)
是的,正则表达式(正则表达式)非常强大。这是我的替换方法:
$reg = "#<a [^>]*href=['\"]([^\"']+\.mp3)['\"][^>]*>(.*?)</a>#";
$content = preg_replace($reg, "[audio mp3='$1' class='asset-audio' title='$2']", $content);
$content
是保存帖子内容的任何变量。我将解释正则表达式的作用:
“#”-第一个和最后一个字符是分隔符。他们实际上不是比赛的一部分
在替换部分,注意$ 1和$ 2。这些指的是比赛中的第一个和第二个括号。
这不是对正则表达式的全部解释,也不是100%完美的解决方案,但它在您的情况下几乎可以100%起作用。正则表达式实际上是一种语言本身,在那里有很多研究。我鼓励您学习并精通它,因为它有很多用途!
我也没有回答您的其余问题,即如何在从数据库到屏幕的途中拦截和更改帖子内容。如果您也需要帮助,请告诉我。
编辑------------------------
这是我在插件或functions.php文件中执行的操作:
add_filter( 'the_content', 'myprefix_use_audio_short_tag' );
function myprefix_use_audio_short_tag( $content ) {
$reg = "#<a [^>]*href=['\"]([^\"']+\.mp3)['\"][^>]*>(.*?)</a#";
$content = preg_replace($reg, "[audio mp3='$1' class='asset-audio' title='$2']", $content);
return $content;
}
带有“ the_content”作为过滤器的“添加过滤器”功能会将您的功能添加到每次从数据库访问帖子内容时都要针对帖子内容运行的功能队列中。这应该会达到您想要的结果。
答案 1 :(得分:0)
将代码粘贴到您的javascript文件中,它将解决您的问题。但愿如此。
$('.asset-audio').each(function(){
var newtag = "[audio mp3="+ $(this).attr('href') +" class="+
$(this).attr('class') +" title="+ $(this).html() +"]";
$(this).after(newtag);
$(this).remove();
});