How to load WP functions?

时间:2012-04-05 作者:porton

我有一个mymail.php 发送电子邮件的脚本(我使用require_once( $_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-includes/class-phpmailer.php\' );.) 并输出纯文本字符串(如“电子邮件发送成功”)

我想在我的脚本中使用WP中定义的函数。我要调用的特定函数是get_option() 以检索网站所有者的电子邮件用户。要为特定get_option() 函数以及导入整个WP核心的内容(如主题的.php文件可用的上下文)?

3 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

这里的根本问题是,永远不要从浏览器直接请求主题或插件中的PHP文件。这是一种极端恶劣的做法,非常脆弱,并且容易出现许多安全问题。

要使其正常工作,您需要在PHP文件的顶部放置类似的内容来引导WordPress:

// the line below is a bad idea, I apologise to those reading this
require_once(\'wp-blog-header.php\');
您可能还想通过定义SHORT_INIT, 尽管这取决于您使用的函数(以及定义时是否加载这些函数)。

But 这是完全错误的做法。因为其:

更多的努力是浪费,更慢,更不安全,可能会导致更高的维护和支持成本,根据您的评论,我建议您改用REST API。使用这些API将节省您的时间和精力,从长远来看,它将使事情变得更简单/更容易(而且更安全)

e、 g。

add_action( \'rest_api_init\', function () {
    register_rest_route( \'porton/v1\', \'/sendemail\', array(
        \'methods\'  => \'GET\',
        \'permission_callback\' => \'__return_true\',
        \'callback\' => \'portons_email_function\',
    ) );
} );

function portons_email_function( $request ) {
    // you get the parameters sent from $request:  
    $to = $request[\'to\'];
    $subject = $request[\'subject\'];
    ... etc ...

    // then send your emails

    // and return the result
    return \'Email is sent successfully.\';
}

jQuery.ajax({
    url: <?php echo wp_json_encode( esc_url_raw( rest_url( \'porton/v1/sendemail\' ) ) ); ?>,
    data: {
        \'to\':      \'[email protected]\',
        \'subject\': \'the subject\',
        ...etc...
    }
}).done(function( data ) {
    console.log( data ); // should print email sent successfully int he browser console
});
请注意\'permission_callback\' => \'__return_true\', 意味着每个人都可以使用这个端点,swap__return_true 返回的函数的名称true 如果用户可以这样做,或者false 如果用户无法避免任何人能够发送电子邮件。

SO网友:Chip Bennett

mymail.php 位于同一目录中,其中style.cssfunctions.php 我正在开发的自定义主题位于。它从执行。当用户以我们的主题的形式单击提交按钮时,js文件。mymail.php 在WordPress之外执行。

所以,基本上,我认为你刚刚回答了自己的问题:

mymail.php is executed outside of WordPress.

由于功能是主题的一部分,因此没有理由不能/不应该执行mymail.php 来自WordPress中的。

您是否考虑过使用wp_mail() 表单提交功能?

SO网友:bueltge

define( \'WP_USE_THEMES\', FALSE );
require( \'./wp-load.php\' );
使用定义的常数来更快地加载,而不是全部加载。您将在自定义邮件功能中使用它,但并不需要加载主题和主题的所有功能。

替代wp-load.php 您还可以加载wp-blog-header.php, 但是wp负载。php是加载WP环境的默认文件。

还有一个提示,设置常量define( \'SHORTINIT\', TRUE );加载更多、更少的文件和更快的WP。但是检查一下;有了这个常量,加载的WP就小得多,而且只加载重要的文件。(有关详细信息,请参见my answer (关于其他问题)

结束

相关推荐

我怎样才能在不修改footer.php的情况下从TwentyElevy中删除“骄傲地由WordPress提供支持”?

我如何在不修改页脚的情况下从twentyeleven中删除“由WordPress提供强大支持”。php,而不创建子主题?我正在寻找一个php命令,例如add_action, remove_action, add_filter, 或者类似的东西。我不是在寻找CSS来隐藏页脚。我不想修改任何主题文件,除了functions.php这可能吗?下面是创建此项的页脚中的代码,以供参考。<div id=\"site-generator\"> <?php do_action( \'tw