如果没有wp-config.php的访问权限,Get_Option()将不起作用

时间:2014-09-12 作者:Francesca

我已经创建了一个插件。在插件的初始化文件中,我创建了一个选项页面,其中包含一些由管理员存储的选项。

<form method="post" action="options.php">
        <?php settings_fields( \'settings-group\' );
        do_settings_sections( \'settings-group\' );
        ?>
            <label>API key</label><br />
            <input type="email" name="apiemail" value="<?php echo get_option(\'apiemail\'); ?>">

            <p><input type="submit" value="Save" class="button-primary" /></p>
</form>
这将正常工作并保存选项。

在里面another file 在插件文件夹中,我需要取回这些选项并将它们存储在变量中。

$apiemail = get_option(\'apiemail\');
但是我得到了错误:

Fatal error: Call to undefined function get_option()
这个文件似乎没有get\\u选项的概念。我可以让它工作,如果我包括一个abs路径wp-config.php

require_once(\'../../../wp-config.php\');
这样就可以正确地获取选项。但是wp config的“require”稍后会与我的尝试发生冲突header(Location:)

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/syyco/wp-config.php:85)

So how do I use get_option in this file without require of wp-config ?

编辑:根据要求,提供有关我想要实现的内容的更多详细信息。

我正在创建一个新闻稿注册插件,它可以向外部API提交电子邮件。客户将看到一个输入框,弹出他们的电子邮件并将其添加。添加后,我想将它们重新路由到一个成功页面。

我创建了一个由两个文件组成的插件。Dotmailer.php 是我的插件初始化文件。包括插件的创建、管理菜单项的创建和选项页的创建。选项页面包含API所需的一系列管理登录详细信息。该文件还创建了一个带有自定义电子邮件输入框的小部件(插件的正面部分)。

这个小部件非常简单。这是一个只有一个输入的表单。它将电子邮件地址数据发布到另一个名为dotmailer-add.php, 也在我的插件文件夹中。

dotmailer-add.php 接收用户的电子邮件并将其发送到API以添加到邮件列表中。API需要授权密钥。此身份验证密钥是我要求管理员设置的选项之一。

This is where the problem occurs. Dotmailer添加。php文件需要使用get_option 获取管理员通过仪表板添加的api密钥。它无法获取此选项,我得到的错误是get\\u选项未定义。如果我require wp配置。php,然后get\\u选项工作正常。

您可以在这里看到完整的代码。

Dotmailer.php (初始化文件)Dotmailer-add.php (小部件表单发布到的脚本)

1 个回复
SO网友:Otto

你没有。

get\\u option()函数是WordPress函数。如果不加载WordPress,则无法使用它。

更重要的是,您不应该直接调用插件中的文件。你应该让你的表单或任何直接链接到该文件的东西链接到一个普通的WordPress端点,并在你的插件中有额外的参数来从WordPress加载该文件。

本质上,你是在倒退。你在插件中运行一个文件,然后让它加载WordPress。但是WordPress应该加载插件,而不是相反。

如果你能更详细地解释你在做什么,也许有人可以告诉你正确的方法。

编辑:鉴于您的其他信息,我邀请您考虑以下事项:

它将电子邮件地址数据发布到另一个名为dotmailer add的脚本。php,也在我的插件文件夹中。

这才是你真正的问题。您正在将信息直接发送到插件文件夹中的文件。这意味着没有加载WordPress,因为您绕过了它。因此您无法访问WordPress功能。

请在WordPress中查看此文件:/wp admin/admin post。php

您可以在顶部找到:

* WordPress Generic Request (POST/GET) Handler
*
* Intended for form submission handling in themes and plugins.
听起来很有希望,对吧?使用这个其实很简单。

制作一个包含您想要的任何表单输入的表单,以及一个隐藏的“动作”。类似这样:

<form method="POST" action="<?php echo admin_url(\'admin-post.php\'); ?>">
<input type="hidden" name="action" value="my_custom_action">
<input blah blah blah>
</form>
现在,在插件中编写如下代码:

add_action(\'admin_post_nopriv_my_custom_action\', \'my_custom_form_handler\');
add_action(\'admin_post_my_custom_action\', \'my_custom_form_handler\');
function my_custom_form_handler() {
  ... stuff to handle the $_POSTed data goes here ...
}
就这样。现在,您可以在WordPress上下文中处理表单,并可以访问表单的所有功能。WordPress加载插件,如果有必要,插件会进行处理。

如果您需要访问WordPress功能,那么您的代码需要经过WordPress,而不是尝试将其作为库包含。WordPress有这样的端点,用于一般表单处理、javascript请求以及各种事情。

结束

相关推荐

WordPress-Site的本地安装上仍未显示wp-config.php文件

我已经使用XAMPP和this Sunny Johal的分步指导(该页的第五篇帖子)。我第一次使用逐步运行所有3个SQL代码(更新wp\\u选项/wp\\u帖子),然后删除wp\\u配置文件(指南的作者建议这是配置文件的最简单方法),页面正确显示了标题,但所有文本和图像的显示方式看起来都没有sylesheet。我想我把事情搞糟了,于是删除了SQL数据库,重新开始。据我所知,我正在以同样的方式遵循同样的步骤,但我得到了两个明确的问题:Wordpress正在显示该网站的2013年旧版本。这与2014年的版本几