所以这就是我正在做的事情:
我的帖子只包含嵌入视频的短代码:
[video width =“1280”height =“720”mp4 =“http://myurl/wp-content/uploads/2016/01/VID_20160114_202806.mp4”] [/ video]
我想要的只是“mp4”变量,除了根据编码可能有不同的名称,所以假设我只需要[2]
值。
请记住,上面的短代码就是帖子里面的全部内容。这是我的所作所为:
$atts = array();
$atts = shortcode_parse_atts( $post->post_content );
//then I use $atts[2];
这是悲惨的失败。
我收到以下通知:Undefined offset: 2
如果我运行print_r
,这是我得到的扭曲数组:
Array
(
[0] => [video
[width] => 1280
[height] => 720
[1] => mp4=" http:="" myurl="" wp-content="" uploads="" 2016="" 01="" vid_20160114_202806.mp4"][="" video]
(诚然,由于它是在一个html标签中打印出来的,所以这会引起所有这些引用;点是,参数的提取失败了)
我认为$post->post_content
不是shortcode_parse_atts
想要的。它需要一串属性。但是,我如何获得属性串? (我知道,正则表达式,对吧?)
答案 0 :(得分:2)
这就是设置短代码的方法:
function my_shortcode($atts){
$atts = shortcode_parse_atts(array(
//default values go here.
), $atts);
}
现在您应该按照预期正确接收这些值,并且可以使用$atts['width']
,$atts['height']
,$atts['mp4']
来访问这些值。
答案 1 :(得分:0)
谢谢Ohgodwhy,我意识到这是可行的方法。但是它会产生问题,因为第三个值可能具有不同的名称,具体取决于视频的编码。
然而我用正则表达式解决了(我不想...因为懒惰......)
describe('The directive', function() {
var element,
scope,
theController;
beforeEach(module('app'));
beforeEach(module('path/to/theDirective'));
beforeEach(inject(function($compile, $rootScope) {
element = angular.element('<div args="args" the-directive ></div>');
scope = $rootScope;
$compile(element)(scope);
scope.args = {
availableValues : [1, 2, 3],
key : 'id',
selectedValues : [],
searchText : '',
flag: false
};
scope.$digest();
theController = element.controller('theDirective');
scope = element.isolateScope() || element.scope();
}));
it('should compile', function() {
expect(element.html()).not.toBeNull();
});
describe('directive controller', function() {
it('should exist', function() {
expect(theController).not.toBeNull();
expect(theController).toBeDefined();
expect(scope.disableAddButton()).toBeDefined();
});
});
});