我是wordpress开发的新手,所以请耐心等待我的问题听起来简单或荒谬,因为我一直在用PHP进行面向对象编程,所以我想在wordpress插件开发中使用OOP方法并遇到{{{ 3}}。我详细介绍了代码,但我仍感到困惑。
目前它带有admin.php
的视图,我想创建另一个用于测试目的的页面,所以我创建了一个文件视图/ admin2.php
,然后我想在{{1}中创建一个超链接将用户重定向到admin.php
,我该怎么办?如果我只是做以下,它不起作用,并给我404错误
admin2.php
我知道我可以创建子菜单,但我不想这样做。我真的很感激这里的任何帮助。
更新
这就是我<a href="admin2.php">go to admin 2</a>
的样子
admin.php
这就是我<?php
echo '<a href="'. plugins_url( 'admin2.php' , __FILE__ ) .'">Go to admin 2 page</a>';
?>
的样子
admin2.php
答案 0 :(得分:2)
Wordpress有一个方便的功能,称为plugins_url()
。它检索绝对URL到插件目录(没有斜杠),或者在使用$path
参数时,检索该目录下的特定文件。您可以将$path
参数指定为相对于plugins目录的硬编码路径,或者方便地将__FILE__
作为第二个参数(如您所做的那样)以使$path
相对于当前PHP脚本文件的父目录:
<?php plugins_url( $path, $plugin ); ?>
但是,如果您在嵌套在目录的子目录中的文件中使用plugins_url()
函数,那么应该使用PHP&#39 ; s dirname()
功能:
<?php
echo
'<a href="' . plugins_url( 'subfolder/admin2.php' , dirname(__FILE__) ) . '" > Go to admin 2 page </a> ';
?>
同样,plugins_url()
函数不应在插件的全局上下文中调用,而是在<{>}或{{{> 中 1}}以确保在调用函数时已挂接init
过滤器。这对于许多网站配置都很重要,如果在插件文件的全局上下文中调用admin_init
,则无法通过其他插件进行过滤(尽管plugins_url
能够过滤它,因为它们在任何其他插件之前运行。)
答案 1 :(得分:1)
除非您将插件页面添加为现有默认项目 1 的子页面,否则我们所有的插件页面都会附加到admin.php
。 没有 admin2.php
,也 plugins_url()
将为我们的管理页面提供实际网址: http://example.com/wp-admin/admin.php?page=PLUGIN-PAGE
。
1 add_management_page
,add_options_page
,add_theme_page
等
功能plugins_url()
可在网址 http://example.com/wp-content/plugins/our-plugin/
中访问我们的资产。你正在寻找的是admin_url( $path )
。
这是一个简单的演示。主插件文件:
<?php
/*
* Plugin Name: (SO) OOP admin navigation
* Plugin URI: http://stackoverflow.com/a/23703521/1287812
*/
/**
* Based on Plugin Class Demo
* https://gist.github.com/toscho/3804204
*/
add_action(
'plugins_loaded',
array( B5F_Demo_OOP::get_instance(), 'plugin_setup' )
);
class B5F_Demo_OOP
{
protected static $instance = NULL;
public $plugin_url = '';
public $plugin_path = '';
public function __construct() {}
public function plugin_setup()
{
$this->plugin_url = plugins_url( '/', __FILE__ );
$this->plugin_path = plugin_dir_path( __FILE__ );
add_action( 'admin_menu', array( $this, 'menu' ) );
}
public static function get_instance()
{
NULL === self::$instance and self::$instance = new self;
return self::$instance;
}
public function menu()
{
add_menu_page(
'Main',
'Main Page',
'add_users',
'my-main-page', # <-- menu_slug used as URL param value
function(){
include_once( 'views/admin_menu.php' );
},
'http://s.w.org/favicon.ico'
);
$hook = add_submenu_page(
null,
'Hidden',
'Hidden Page',
'add_users',
'my-hidden-page', # <-- submenu_slug used as URL param value
function(){
include_once( 'views/admin_submenu.php' );
}
);
# Print scripts
// add_action( "admin_print_scripts-$hook", array( $this, 'enqueue' ) );
}
}
<强> /views/admin_menu.php 强>
<?php
printf(
'<h2>%s</h2><a href="%s">%s</a>',
__( 'Main page' ),
admin_url( 'admin.php?page=my-hidden-page'), # http://example.com/wp-admin/admin.php?page=my-hidden-page
__( 'Hidden sub page' )
);
<强> /views/admin_submenu.php 强>
<?php
printf(
'<h2>%s</h2><a href="%s">%s</a>',
__( 'Hidden sub page' ),
admin_url( 'admin.php?page=my-main-page' ), # http://example.com/wp-admin/admin.php?page=my-main-page
__( 'Main page' )
);