我认为你真正的问题是时机,因为你应该只做remove_action
和add_action
在wp_enqueue_media
在结束时激发的操作wp_enqueue_media()
函数,添加要替换的操作后:
add_action( \'wp_enqueue_media\', function () {
if ( ! remove_action( \'admin_footer\', \'wp_print_media_templates\' ) ) {
error_log("remove_action fail");
}
add_action( \'admin_footer\', \'my_print_media_templates\' );
} );
(我的猜测是
remove_action()
你所做的实际上是失败的
wp_print_media_templates()
仍在通话中,但在
my_print_media_templates()
, 因此DOM有两个媒体模板的副本,但您的成功是因为它是第一个。虽然我不明白你为什么要自己做
require_once
在“media template.php”中,这是一个相当大的闪烁警告灯!)
此外,虽然这是个人喜好,但我更喜欢操作现有模板(在调用原始模板之后wp_print_media_templates()
) 而不仅仅是复制粘贴整个沙邦并编辑它们。例如:
function my_print_media_templates() {
$replaces = array(
\'/<option value="center"/\' => \'<option value="leftsuper">\' . esc_attr__(\'LeftSuper\') . \'</option>$0\',
\'/<option value="none"/\' => \'<option value="rightsuper">\' . esc_attr__(\'RightSuper\') . \'</option>$0\',
\'/<button class="button" value="center">/\' => \'<button class="button" value="leftsuper">\' . esc_attr__(\'LeftSuper\') . \'</button>$0\',
\'/<button class="button active" value="none">/\' => \'<button class="button" value="rightsuper">\' . esc_attr__(\'RightSuper\') . \'</button>$0\',
);
ob_start();
wp_print_media_templates();
echo preg_replace( array_keys( $replaces ), array_values( $replaces ), ob_get_clean() );
}
我认为这比拷贝更易于维护&;粘贴方法,几乎可以保证在每次新发布的WP上都会过时。