我只是把我的职能分开了。php文件转换为较小的文件和所需的每个内部函数。php
其中一个文件是“dashboard”。php’在这里,我添加了一个小部件来更改商店中的通知。
<?php
// Store Notice Dashboard Widget
add_action(\'wp_dashboard_setup\', \'widgets_definitions\');
function widgets_definitions() {
error_log("widget_defs");
wp_add_dashboard_widget(
\'update_store_notice_widget\', // widget slug
\'Update Store Notice\', // Title
\'render_store_notice_widget\', // Display function
\'handle_store_notice_widget\' // Handle configure function
);
error_log("widget_defs 2");
}
function render_store_notice_widget() {
error_log("render");
$notice_text = get_option(\'woocommerce_demo_store_notice\');
error_log($notice_text);
if (!isset($notice_text)) {
$notice_text = "";
}
echo "<p><strong>Current Store Notice:</strong></p>";
echo "<p>" . $notice_text . "</p>";
}
function handle_store_notice_widget() {
error_log("handler");
$notice_text = get_option(\'woocommerce_demo_store_notice\');
if (\'POST\' == $_SERVER[\'REQUEST_METHOD\'] && isset($_POST[\'woocommerce_demo_store_notice\'])) {
error_log("POST");
//minor validation
$notice_text = wp_kses($_POST[\'woocommerce_demo_store_notice\']);
error_log($notice_text);
//save update
update_option(\'woocommerce_demo_store_notice\', $notice_text);
}
if (!isset($notice_text)) {
$notice_text = "";
}
error_log($notice_text);
echo "<p><strong>New Store Notice</strong></p>";
echo "<textarea name=\'woocommerce_demo_store_notice\'>" . $notice_text . "</textarea>";
}
?>
由于某些原因,它没有显示在我的仪表板中,没有错误。
我在require之前和之后以及函数末尾添加了error\\u log()。php文件,我可以在日志文件中看到所有3个,但仪表板上没有一个。php’。
知道怎么回事吗?
编辑
<?php
add_action(\'wp_enqueue_scripts\', \'supro_child_enqueue_scripts\', 20);
function supro_child_enqueue_scripts() {
wp_enqueue_style(\'supro-child-style\', get_stylesheet_uri());
if (is_rtl()) {
wp_enqueue_style(\'supro-rtl\', get_template_directory_uri() . \'/rtl.css\', array(), \'20180727\');
}
}
require "includes/dashboard.php";
require \'file\';
require \'file\';
require \'file\';
[...]
这就是我的职能。php文件,唯一省略的是所有其他要求。
我会将其更改为wp\\u kses\\u post(),谢谢@达维罗姆西
最合适的回答,由SO网友:Dave Romsey 整理而成
使用此代码要求主题的functions.php
文件:
require get_template_directory() . \'includes/dashboard.php\';
为了完整(和理智),我
dashboard.php
文件位于此处:
my-theme/includes/dashboard.php
我仔细研究了最初的问题,我认为现在发生的是require语句在无声中失败了,因为
wp-admin/includes/dashboard.php
文件实际上是包含的内容。
为了测试这一点,我在我的主题中添加了以下代码functions.php
文件:
// require \'includes/dashboard.php\';
$file_contents = file_get_contents( \'includes/dashboard.php\' );
error_log( var_export( $file_contents, true ) );
PHP错误日志的结果表明,我们确实包含了错误的文件。
[27-Dec-2019 20:26:27 UTC] \'<?php
/**
* WordPress Dashboard Widget Administration Screen API
*
* @package WordPress
* @subpackage Administration
*/
/**
* Registers dashboard widgets.
*
* Handles POST data, sets up filters.
*
* @since 2.5.0
*
* @global array $wp_registered_widgets
* @global array $wp_registered_widget_controls
* @global array $wp_dashboard_control_callbacks
*/
function wp_dashboard_setup() {
global $wp_registered_widgets, $wp_registered_widget_controls, $wp_dashboard_control_callbacks;
$wp_dashboard_control_callbacks = array();
...