1

我有一个与此类似的数组:

$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'
        ), 
    ),
);

以上是资产的存储方式。

我想编写一个接受类型cssjs名称的函数,该类型将找到cssjs然后名称将用于每个与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 然后取消设置该数组。

4

2 回答 2

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";
于 2013-10-19T17:05:56.557 回答
1

试试这个(假设资产存储在对象属性中):

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功能仍然有效。

于 2013-10-19T16:55:13.417 回答