首页 >CMS教程 >WordPress >在WordPress中显示从save_post钩中显示错误

在WordPress中显示从save_post钩中显示错误

Joseph Gordon-Levitt
Joseph Gordon-Levitt原创
2025-02-16 11:50:17847浏览

>处理和显示WordPress save_post挂钩的错误:三种方法

钩的错误的单一标准化方法。 但是,存在几种有效的策略,每种策略都具有自己的优势和缺点。本文探讨了三种突出的方法:使用save_post全局,利用wordpress瞬变,并在重定向中采用get参数。$_SESSION

Displaying Errors from the save_post Hook in WordPress

复杂性源于WordPress的储蓄后重定向。 执行

>挂钩后,用户重定向,打破了执行线程并失去对全局变量的访问。 因此,需要一种机制将错误信息从保存操作传输到重定向页面。 save_post

方法1:利用 global

> $_SESSION这个简单的方法将错误消息存储在全局变量中。 实现并避免数据库交互是简单的。>

$_SESSION实现:

PROS:
<code class="language-php">if ( !session_id() ) {
    session_start();
}

if ($error) {
    $_SESSION['my_plugin_errors'] = $error->get_error_message();
}

// ...in admin_notices hook...
add_action( 'admin_notices', 'my_error_message' );
function my_error_message() {
    if ( isset( $_SESSION['my_plugin_errors'] ) ) {
        ?>
        <div class="error">
            <p><?php echo $_SESSION['my_plugin_errors']; ?></p>
        </div>
        <?php
        unset( $_SESSION['my_plugin_errors'] );
    }
}</code>
轻松实现,没有数据库开销。>
  • cons:>不是标准的WordPress练习;依靠会话处理,这可能不会在所有设置中始终启用。>
  • 方法2:使用WordPress瞬变> 瞬态提供了一种WordPress本地的缓存机制。 他们将数据存储在有效期的时间内,使用对象缓存(如果可用)或落回数据库。

实现:

  • pros:对WordPress友好,自动清理过期的数据。 如果未配置对象缓存,则
  • >
cons:数据库相互作用;边缘案例的潜在数据丢失。
<code class="language-php">if ($error) {
    set_transient("my_save_post_errors_{$post_id}_{$user_id}", $error, 45);
}

// ...in admin_notices hook...
add_action( 'admin_notices', 'my_error_message' );
function my_error_message() {
    if ( $error = get_transient( "my_save_post_errors_{$post_id}_{$user_id}" ) ) {
        ?>
        <div class="error">
            <p><?php echo $error->get_error_message(); ?></p>
        </div>
        <?php
        delete_transient("my_save_post_errors_{$post_id}_{$user_id}");
    }
}</code>
  • 方法3:将get参数附加到重定向url
  • >此镜像WordPress自己的方法用于显示更新消息。 错误代码作为查询参数添加到重定向URL。
  • 实现:

pros:
    高性能,无数据库访问。
  • > cons:
  • >需要重复错误消息;维护开销可能会随大量的错误代码而增加。
<code class="language-php">if ($error) {
    add_filter('redirect_post_location', function( $location ) use ( $error ) {
        return add_query_arg( 'my-plugin-error', $error->get_error_code(), $location );
    });
}

// ...in admin_notices hook...
add_action( 'admin_notices', 'my_error_message' );
function my_error_message() {
    if ( isset( $_GET['my-plugin-error'] ) ) {
        // Handle error based on error code (switch statement)
        ?>
        <div class="error">
            <p><?php  // Display error message based on $_GET['my-plugin-error'] ?></p>
        </div>
        <?php
    }
}</code>
  • 结论

    最佳方法取决于特定上下文。瞬态在WordPress集成和性能之间提供了良好的平衡,而GET参数方法则提供了最佳性能,但需要对错误消息进行更仔细的管理。在不同的WordPress环境中,该方法最简单,但可靠性较差。 选择最适合您需求和项目量表的方法。$_SESSION

以上是在WordPress中显示从save_post钩中显示错误的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn