如何从全站模板文件中的函数.php中调用定制函数?

时间:2019-04-25 作者:Bayanaa

我在wp-content/themes/xxxx/modules/custom中有一个自定义php文件。php和我想从函数中调用函数。php。现在我所有的函数(相同的函数)都在不同的文件中,因为仍然无法解决这个问题。

我想在函数中创建一个函数。php并从网站的任何地方调用此函数。此函数将从另一个php文件调用(Ajax不会调用此函数)。当我包括或需要任何文件时(不导入wp load、wp blog header、functions.php)

我读了很多论坛,尝试了很多方法,比如

1.

define(\'WP_USE_THEMES\', true);
require( \'/opt/bitnami/apps/wordpress/htdocs/wp-blog-header.php\' ); 
2。

include (/opt/bitnami/apps/wordpress/htdocs/wp-content/themes/xxx/functions.php);
3。

require($_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-load\');
require(/opt/bitnami/apps/wordpress/htdocs/wp-load\');
等等,我尝试了很多方法,但所有的例子都不起作用。

是否有任何方法可以在Functions中声明函数。php和随处使用,没有任何问题?。

5 个回复
SO网友:HongPong

值得注意的是,PHP命名空间问题可能会导致此问题。这可能会吸引人,因为直到最近,名称空间才被排除在Wordpress核心代码库之外。

例如,您的一个代码文件的顶部可能有一个名称空间声明。如果是这种情况,则必须使用正确的名称空间作为对函数的任何引用的前缀。

尤其是在Wordpress中,如果存在不匹配的情况,除非名称空间正确,否则将找不到该函数。

在主题中such as Sage:

Warning: call_user_func_array() expects parameter 1 to be a valid callback, function ‘myplugin_settings’ not found or invalid function name
您需要以这种方式指示名称空间。如果已在此文件上调用了名称空间,则需要添加以下内容:

add_action( \'init\' , __NAMESPACE__ . \'\\\\myplugin_settings\' );
如果文件不在名称空间中,则必须手动添加。请注意,由于字符转义,需要使用双反斜杠。

有关PHP中名称空间的详细信息:

(添加此答案是因为我在这里登陆,名称空间是我的障碍-我没有意识到add\\u操作名称空间问题。)

SO网友:Bayanaa

在过去的7天里,我试图找到一个解决方案,但仍然找不到解决方案。

我将发布我的代码,比如如何尝试导入wp博客标题。php或wp加载。php

以下是页面代码:

ini_set(\'display_errors\', 1);
ini_set(\'display_startup_errors\', 1);
error_reporting(E_ALL);
if (file_exists(\'/opt/bitnami/apps/wordpress/htdocs/wp-blog-header.php\')) {
    error_log("The file \'/opt/bitnami/apps/wordpress/htdocs/wp-blog-header.php\' exists");
} else {
    error_log("The file \'/opt/bitnami/apps/wordpress/htdocs/wp-blog-header.php\' does not exist");
}
require_once(rtrim($_SERVER[\'DOCUMENT_ROOT\'], \'/\') . \'/wp-load.php\');
error_log(print_r(get_header(), true));die();
以下是apache错误日志:

[Mon Apr 29 08:58:29.362243 2019] [proxy_fcgi:error] [pid 9264:tid 139719891371776] [client xxx] AH01071: Got error \'PHP message: The file \'/opt/bitnami/apps/wordpress/htdocs/wp-blog-header.php\' exists\\n\', referer: https://formaspace.com/contact/
你看到require\\u once部分没有回答吗?,因为它在wp加载页失败。此外,如果我删除require\\u once行,它会显示错误,如对未定义函数的get\\u header调用

get\\u header只是一个示例。我已经尝试调用函数了。php功能

SO网友:user3135691

Try:

<?php

  $dir = get_template_directory_uri();
  require $dir . \'/yourfolder/yourfile.php\';

 ?>
SO网友:Pat_Morita

第一个问题是:您的Php文件是自定义的,而不是wp加载的一部分吗?这意味着它不会被主题或插件加载/包含。

然后,在这个文件中,WordPress是未知的,你的主题和功能也是未知的。php。

所以你必须加载它。根据文件的位置,您必须返回到根级别才能加载wordpress:

require_once(\'/../../../wp-load.php\');
但这不是一个非常优雅的解决方案。最好直接寻址根目录

require_once(rtrim($_SERVER[\'DOCUMENT_ROOT\'], \'/\') . \'/wp-load.php\');
加载WordPress后,您可以访问函数中的函数。php文件。但要小心安全问题。直接调用pho文件从来都不是一个好主意。如果处理post/get请求,请确保清理输入。

SO网友:Jesse Nickles

其中一些与违约有关load sequence WordPress核心和plugin files. 对于具有父主题、子主题、主题框架或选项框架、主题的复杂网站上的开发人员来说,事情可能会变得混乱functions.php 文件、MU插件和普通插件。。。

简而言之,也许更可靠的解决方案是为某些关键功能创建一个MU插件,以确保它在加载其他项之前加载,并且不能被禁用,等等。

We use this approach 在SlickStack中加载关键功能(例如我们的Clear Caches插件),我们还包括/wp-content/functions.php 作为内部的特殊文件wp-config.php 因此,函数在加载顺序中加载得更高,这允许开发人员更好地修改某些站点范围的特性和函数。这也有助于防止客户机(etc)更改为新的WordPress主题等时自定义功能消失。

// include the Custom Functions file
include_once(ABSPATH . \'wp-content/functions.php\');
这也允许网络主机或代理机构;“锁定”;他们的wp-config.php 只读,同时仍允许开发人员创建高优先级PHP定义的常量。

相关推荐

Calculations in functions.php

我为自己创建了一个发票主题,并试图在自定义列中获取发票总额。我已经尝试调整模板页面中使用的代码,以便在函数中显示这一点。php文件,但它不工作。我的乘法操作数出现了一个操作数错误,我不知道为什么。这是我的代码(如有任何帮助,将不胜感激)。if( $column_name == \'invoice_total\' ) { $hours = 0; // This allows counting of each sub_field //* Set repeater va