2013-06-18 88 views
0

我正在构建一个Wordpress插件,该插件只能在我的网站上使用。我已将它放在wp-content/plugins/myPlugin下的常规位置。在那个目录中,我放置了一个index.php来防止目录列表,并通过将请求发送到wordpress的404页面来隐藏名称为myPlugin的目录。代码:防止直接访问Wordpress插件中的php文件

include ('../../../wp-load.php'); 
header("HTTP/1.0 404 Not Found - Archive Empty"); 
$wp_query->set_404(); 
require TEMPLATEPATH . '/404.php'; 
exit; 

这虽然不访问在myurl.com/wp-content/plugins/myPlugin/myPlugin.php我的PHP文件妨碍任何人。我如何在我的插件中为这个和其他php文件实现相同的404?需要注意的是,这些文件应该可以通过WordPress管理员访问。也许WordPress的管理员设置一些全局变量,当我通过myurl.com/wp-admin/admin.php?page=myPlugin/myPlugin.php访问一个PHP文件?

回答

1

添加到Sammitch的答案,那就是你可以用什么为WordPress:

defined('ABSPATH') or die("Your message here"); 

ABSPATHwp-load.php定义:

/** Define ABSPATH as this file's directory */ 
define('ABSPATH', dirname(__FILE__) . '/'); 
+0

谢谢!这工作! – Dagligleder

0

许多应用程序做这样的事情在他们的全球头文件如下:

define('_JEXEC', TRUE); // Joomla, btw 

所以,你可以做这样的事情在你不想要的应用程序上下文以外执行文件:

if(!defined('_JEXEC')) { die('unatuhorized'); } 

但是,不幸的是,WordPress的似乎并没有做这样的事情,但它确定定义一个度量的其他常量,如WP_USE_THEMES,你可以侧插你的目的。

您还可以使用get_defined_constants()来获取插件运行时所定义内容的列表。