简而言之,事情有时很简单:不,这是不可能的。整个部分都是硬编码的。
长答案(不建议这样做)
您可以跳入
esc_html
和
attribute_escape
过滤器并在那里返回空*),但由于这些是非常通用的名称,可能还会干扰其他过滤器结果,因此会破坏其他内容。
<?php
/* Plugin Name: (#82379) Empty Media options */
add_filter( \'image_size_names_choose\', \'wpse82379_esc_attr\' );
function wpse82379_trigger_filter( $sizes )
{
if ( \'post\' !== get_current_screen()->post )
return $safe_text;
add_filter( \'attribute_escape\', \'wpse82379_esc_attr\', 10, 2 );
add_filter( \'esc_html\', \'wpse82379_esc_attr\', 10, 2 );
return $sizes;
}
function wpse82379_esc_attr( $safe_text, $text )
{
if ( ! in_array( absint( $text ), range( 6, 9 ) ) )
return $safe_text;
static $counter = 0;
$static++;
//
if ( 1 === $static )
{
ob_start();
return $safe_text;
}
if ( in_array( $static, array( 7, 9 ) ) )
{
remove_filter( current_filter(), __FUNCTION__ );
if ( \'esc_html\' === current_filter() )
{
$html = ob_get_contents();
ob_end_clean();
// In case you want to alter the layout, rework $html and return it
return \'\';
}
}
return $safe_text;
}
由于escape过滤器几乎无处不在,因此不建议在生产中使用它们(如gettext过滤器)。它们会在每次逃逸时触发(每页数百次),并且会真正降低系统的速度。
为了解决这个问题,我使用了在HTML脚本输出之前最后运行的过滤器,以尽可能晚地添加回调。然后,我会尽可能频繁地中止,以不触发除“添加新内容”屏幕之外的任何其他页面上的插件过滤器。在检查了源文件HTML之后,我可以看到,对于版本3.5,我们只有两个调用esc_attr_e()
(内部触发esc_attr
因此,我们的过滤器),但有两个字符串,所以我们可以安全地中止这些。当我们最终到达过滤器时,我返回一个空字符串,然后立即删除过滤器,以不触发以后的任何调用。
这是你能做到的最好的。
考虑到这一点后,我使用了ob缓存-虽然不漂亮,但它应该可以工作(除非我计算错了)。注意:这是在写作和思考时编写的,因此不需要测试。你必须确认它是否有效。
最后注意:您必须在每个后续版本(从WP v3.6开始)后重新检查此插件,以确保标记没有更改,并且仍按预期工作。
*)这将给您留下空字符串。换句话说:它们仍然存在,但不起作用且为空(没有字符串)。