>处理和显示WordPress save_post
挂钩的错误:三种方法
save_post
全局,利用wordpress瞬变,并在重定向中采用get参数。$_SESSION
>挂钩后,用户重定向,打破了执行线程并失去对全局变量的访问。 因此,需要一种机制将错误信息从保存操作传输到重定向页面。
save_post
>
$_SESSION
这个简单的方法将错误消息存储在
$_SESSION
实现:
<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>轻松实现,没有数据库开销。
实现:
<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>
pros:
<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中文网其他相关文章!