在wp_dashboard_setup不起作用的情况下将小部件添加到仪表板

时间:2019-12-26 作者:Daviid

我只是把我的职能分开了。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(),谢谢@达维罗姆西

1 个回复
最合适的回答,由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();

...

相关推荐

Google Analytics Dashboard for WP in Custom(自定义列中的Google可湿性分析仪表板)

所以我自定义了我的自定义帖子类型列,以便它们按我想要的顺序显示。add_filter(\'manage_publications_posts_columns\', \'set_publication_custom_columns\'); function set_publication_custom_columns( $columns ) { $columns = array( \'cb\' => \'<input type=\"checkbox\" /