一般来说,我不建议以这种方式编辑文件,只建议使用已知的DISALLOW_FILE_EDIT
或DISALLOW_FILE_MODS
在map_meta_cap()
作用
但不管怎样,看看我们是否能找到一种从主题编辑器中排除文件的方法是很有趣的。以下是一些想法:
主题编辑器中使用的允许文件似乎没有明确的过滤器:
$allowed_files = $theme->get_files( \'php\', 1 );
$has_templates = ! empty( $allowed_files );
$style_files = $theme->get_files( \'css\' );
$allowed_files[\'style.css\'] = $style_files[\'style.css\'];
$allowed_files += $style_files;
但我们可以通过以下方式阻止文件更新:
示例#1
add_action( \'check_admin_referer\', function( $action, $result )
{
// Edit this to your needs
$locked_file = \'404.php\';
$locked_theme = \'twentyfifteen\';
// Disallow editing for this file
if(
false !== strpos( $action, \'edit-theme_\' )
&& false !== strpos( $action, $locked_theme . \'/\' . $locked_file )
)
wp_die( __( "Sorry, you can\'t edit this file!" ) );
}, 10, 2 );
请注意,我在这里对文件/主题检查比较懒惰,因此可以改进;-)
现在,只有在编辑文件并按下
更新文件按钮。这可能会让用户体验受挫。
我们可以在单击文件编辑链接时立即停止屏幕输出。这也不是很好的用户体验,但比另一种更好。
因此,我们可以在前面的示例中添加以下内容:
示例#2
这里我们禁用
edit_theme
针对所有用户,在
theme-editor.php
屏幕,当获取参数时
file
和
theme
具有特定值。
add_action( \'load-theme-editor.php\', function()
{
add_filter( \'user_has_cap\', function( $allcaps, $caps, $args, $wp_user )
{
// Edit this to your needs
$locked_file = \'404.php\';
$locked_theme = \'twentyfifteen\';
// Disallow editing for this file
$file = filter_input( INPUT_GET, \'file\', FILTER_SANITIZE_STRING );
$theme = filter_input( INPUT_GET, \'theme\', FILTER_SANITIZE_STRING );
if(
isset( $allcaps[\'edit_themes\'] )
&& $locked_file === $file
&& $locked_theme === $theme
&& isset( $args[0] )
&& \'edit_themes\' === $args[0]
&& isset( $args[1] )
&& 1 == $args[1]
)
$allcaps[\'edit_themes\'] = 0;
return $allcaps;
}, 10, 4 );
});
或使用
map_meta_cap
改为过滤。但这看起来相当复杂,所以让我们把它简化为:
add_action( \'load-theme-editor.php\', function()
{
// Edit this to your needs
$locked_file = \'404.php\';
$locked_theme = \'twentyfifteen\';
// Disallow editing for this file
$file = filter_input( INPUT_GET, \'file\', FILTER_SANITIZE_STRING );
$theme = filter_input( INPUT_GET, \'theme\', FILTER_SANITIZE_STRING );
if(
$locked_file === $file
&& $locked_theme === $theme
)
wp_die( __( "Sorry, you can\'t edit this file!" ) );
});
另一种方法是使用Javascript从选择框中删除文件。