在WordPress中,我使用ACF来创建一个使用灵活内容字段的页面构建器。对于每个组件,我手动创建_component-name.scss
并将其附加到主SCSS文件中。这很好,但容易出错。
鉴于此,我正在查看ACF过滤器,并看到有acf/update_field
,所以我的意图是说,当灵活的内容字段更新时,通过布局数组循环并使用布局名称创建scss文件,因为那时我不能忘记。
我有一个问题是,创建是所有的罚款,但当你重命名一个布局,我真的想更新相应的scss文件的名称,但是,我不知道以前的名称是什么。
这是我的尝试,它可以处理创建,但我被重命名难住了。
add_filter('acf/update_field', 'create_css_files', 10, 1);
/**
* When ACF Fields are saved, check to see if it was the page builder,
* if it was, attempt to create a new scss file for any new elements within our page builder.
* Note that get_stylesheet_directory gets the root of the current theme.
*
* @param [type] $field
*
* @return void
*/
function create_css_files($field)
{
if ($field['name'] == 'page_builder_elements') {
foreach ($field['layouts'] as $layout) {
$name = $layout['name'];
// Only allow letters, numbers, hyphens and underscores
$clean_name = preg_replace('/[^A-Za-z0-9_\-]/', '', $name);
// Replace underscores with hyphens in the layout name
$clean_name = str_replace('_', '-', $clean_name);
$file_path = get_stylesheet_directory() . '/resources/styles/scss/_' . $clean_name . '.scss';
$directory = dirname($file_path);
if (!file_exists($directory)) {
mkdir($directory, 0755, true);
}
if (!file_exists($file_path)) {
$file_handle = fopen($file_path, 'w');
fclose($file_handle);
}
$import_directive = "@import 'scss/$clean_name';" . "\n";
$base_stylesheet_path = get_stylesheet_directory() . '/resources/styles/app.scss';
file_put_contents($base_stylesheet_path, $import_directive, FILE_APPEND);
}
}
return $field;
}
3条答案
按热度按时间csga3l581#
最简单的管理方法可能是分析目录中存在的文件以及不在布局名称列表中的文件,然后删除这些文件。
vaqhlq812#
我不知道我是否满意,但这就是我最终得到的。
q8l4jmvw3#
我想保留我现有的答案作为起点,但这里有一个处理编辑和删除的改进。
我希望这在未来能帮助到其他人。
需要注意的是,为了清晰起见,路径可能会存储为更高的变量。