操作后编辑插入已编辑的问题创建新的上载系统后,我想添加指向WP admin不同部分的按钮/链接:
管理栏中“Media”菜单上的子菜单“New”菜单上的子菜单“Media”中的按钮“Add New page”(添加新页面)(如操作屏幕截图中所示)
“Media Library”页面中页面标题附近的按钮非常简单,分别链接到,add_media_page
和$wp_admin_bar->add_node
功能。第三,有点难以获得,因为thta按钮是在core中硬编码的,可以通过javascript添加,但core中有一个钩子,\'post-plupload-upload-ui\'
, 这允许在拖动区域后输出一些内容,我认为这对您的范围也有好处(请参见此答案底部的屏幕截图)。
第四个更难获得,因为没有挂钩,然而,就在Deafolt“Add New”按钮输出之前,代码中有一行:
echo esc_html( $title );
在哪里$title
是__(\'Media Library\')
.返回的值esc_html
可以使用更改esc_html
过滤器,因此您可以使用此过滤器输出自定义按钮的标记。但是,您应该注意只在适当的页面上运行过滤器,只针对所需的字符串,并在第一次运行后将其删除:否则,任何字符串都将传递给esc_html
将受到影响。
请注意,这是一种棘手的方法,因此在WP的未来版本中,它将无法再工作,但在当前版本(3.8)和以前的版本(3.1及更新版本)中,它可以工作。
I created a class, that handle all the 4 tasks. 该类作为一个独立的插件发布在这里,但它可能会被集成到您的插件中。当然,您必须自定义前3个功能。
<小时>
<?php
/**
* Plugin Name: Custom Upload UI
*/
class CustomUploadUI {
static function getLabel() {
// change here the label of your custom upload button
return \'Custom Add New Media\';
}
static function getUrl() {
// change here the url of your custom upload button
return add_query_arg( array(\'page\'=>\'my-custom-upload\'), admin_url(\'upload.php\') );
}
function render() {
// this is the function that render your custom upload system
if ( ! current_user_can( \'upload_files\' ) ) {
echo \'<h2>Sorry, you are not allowed to upload files.</h2>\';
return;
}
?>
<div class="wrap">
<h2>Custom Upload System</h2>
<p>Hi, I\'m a custom upload system</p>
<p class="submit"><input name="submit" onClick="alert(\'Foo!\');return false;" id="submit" class="button button-primary" value="Upload Something" type="submit"></p>
</div>
<?php
}
function __construct() {
add_action(\'load-upload.php\', array($this, \'indexButton\'));
add_action(\'admin_menu\', array($this, \'submenu\') );
add_action( \'wp_before_admin_bar_render\', array( $this, "adminBar" ) );
add_action(\'post-plupload-upload-ui\', array($this, \'mediaButton\'));
}
function submenu() {
add_media_page( self::getLabel(), self::getLabel(), \'upload_files\', \'my-custom-upload\', array($this, \'render\') );
}
function adminBar() {
if ( ! current_user_can( \'upload_files\' ) || ! is_admin_bar_showing() ) return;
global $wp_admin_bar;
$wp_admin_bar->add_node( array(
\'parent\' => \'new-content\',
\'id\' => \'custom-upload-link\',
\'title\' => self::getLabel(),
\'href\' => self::getUrl()
) );
}
function mediaButton() {
if ( current_user_can( \'upload_files\' ) ) {
echo \'<div><p align="center">\';
echo \'<input id="custom-browse-button" type="button" value="\' . self::getLabel() . \'" class="button" />\';
echo \'</p></div>\';
$this->mediaButtonScript();
}
}
function mediaButtonScript() {
if ( ! current_user_can( \'upload_files\' ) ) return;
?>
<script>
jQuery(document).on(\'click\', \'#custom-browse-button\', function(e) {
e.preventDefault();
window.location = \'<?php echo self::getUrl(); ?>\';
});
</script>
<?php
}
function indexButton() {
if ( ! current_user_can( \'upload_files\' ) ) return;
add_filter( \'esc_html\', array(__CLASS__, \'h2Button\'), 999, 2 );
}
static function h2Button( $safe_text, $text ) {
if ( ! current_user_can( \'upload_files\' ) ) return $safe_text;
if ( $text === __(\'Media Library\') && did_action( \'all_admin_notices\' ) ) {
remove_filter( \'esc_html\', array(__CLASS__, \'h2Button\'), 999, 2 );
$format = \' <a href="%s" class="add-new-h2">%s</a>\';
$mybutton = sprintf($format, esc_url(self::getUrl()), esc_html(self::getLabel()) );
$safe_text .= $mybutton;
}
return $safe_text;
}
}
$ui = new CustomUploadUI;
媒体页面中的屏幕截图在媒体中添加新页面
媒体菜单的新建子菜单
管理栏中“+新建”菜单的新建子菜单