我有一个类似的数组:
$scripts_to_load = array(
'css' => array(
array(
'name'=>'core-css',
'path'=>get_bloginfo('stylesheet_url')
),
array(
'name'=>'media-query-css',
'path'=>get_template_directory_uri() . '/assets/mediaquery.css'
),
),
);
以上是资产的存储方式。
我想编写一个带有类型css
或js
和名称的函数,该类型会找到css
或js
然后找到名称将用于每个匹配其中一个数组中的name
键的键,如果它发现该数组将被取消设置。
所以我拥有的,是不接受的:public function remove_asset($type, $name){}
,所以如果我传入remove_asset('css', 'media-query-css')
,那么数组应该是这样的:
$scripts_to_load = array(
'css' => array(
array(
'name'=>'core-css',
'path'=>get_bloginfo('stylesheet_url')
),
),
);
我只是不确定如何做到这一点......我可以找到$type
就好了,但是它发现$ name给了我麻烦然后取消了那个数组。
答案 0 :(得分:2)
此功能可满足您的需求:
function remove_asset($type, $name, &$scripts_to_load) {
if( isset($scripts_to_load[$type] ) ) {
foreach( $scripts_to_load[$type] as $key => $value ) {
if( !empty( $value['name'] ) && $value['name'] == $name ) {
unset( $scripts_to_load[$type][$key] );
}
}
}
}
有一个控制运行:
$scripts_to_load = array(
'css' => array(
array(
'name'=>'core-css',
'path'=>'stylesheet_url'
),
array(
'name'=>'media-query-css',
'path'=>'/assets/mediaquery.css'
),
),
);
print_r( $scripts_to_load );
echo "\n";
remove_asset('css', 'media-query-css', $scripts_to_load);
print_r( $scripts_to_load );
echo "\n";
答案 1 :(得分:1)
试试这个(假设资产存储在object属性中):
public function remove_asset($type, $name){
if(isset($this->assets[$type][$name])) {
unset($this->assets[$type][$name]);
}
}
这应该按给定的类型和名称删除资产。
哦,当然,资产数组应如下所示:
$this->assets = array(
'css' => array(
'css_name1' => 'path_to_css_1',
'css_name2' => 'path_to_css_2',
),
'js' => array(
'js_name1' => 'path_to_js_1',
'js_name2' => 'path_to_js_2',
)
);
现在,如果你打电话:
$this->remove_asset('css', 'css_name2');
$this->remove_asset('js', 'js_name1');
你最终应该:
$this->assets = array(
'css' => array(
'css_name1' => 'path_to_css_1',
),
'js' => array(
'js_name2' => 'path_to_js_2',
)
);
编辑:基本上在处理资产属性时您希望存储更多控件,而不仅仅是路径,因此我的建议(结束)数组应该是:
$this->assets = array(
'css' => array(
'css_name1' => array(
'src' => 'path_to_css_1',
'media' => 'screen',
'type' => 'text/css',
),
'css_name2' => array(
'src' => 'path_to_css_2',
'media' => 'print',
'type' => 'text/css',
),
),
'js' => array(
'js_name1' => array(
'src' => 'path_to_js_1',
'type' => 'text/javascript',
),
),
'icon' => array(
'favicon' => array(
'href' => 'path_to_favicon',
'rel' => 'shortcut icon',
),
'meta' => array(/* ... */)
);
remove_asset
功能仍然有效。