- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望我的插件在停用时删除/刷新它正在设置的重写规则。这是我所拥有的。我不确定为什么即使停用了插件,重写规则仍然有效。
谢谢
<?php
if(!class_exists('MyPlugin'))
{
class MyPlugin
{
public function __construct() {
add_action('init', array( &$this, 'add_rewrite_rule' ) );
add_action('init', array( &$this, 'add_rewrite_tag' ) );
}
public static function activate() { }
public static function deactivate() {
flush_rewrite_rules();
}
public function add_rewrite_rule(){
global $wp_rewrite;
add_rewrite_rule('^content/([^/]*)/?$','index.php?page_id=10&myuniquepid=$matches[1]','top');
$wp_rewrite->flush_rules();
}
public function add_rewrite_tag(){
add_rewrite_tag('%myuniquepid%','([^&]+)');
}
} // END class MyPlugin
} // END if(!class_exists('MyPlugin'))
if(class_exists('MyPlugin'))
{
// Installation and uninstallation hooks
register_activation_hook(__FILE__, array('MyPlugin', 'activate'));
register_deactivation_hook(__FILE__, array('MyPlugin', 'deactivate'));
// instantiate the plugin class
$myplugin = new MyPlugin();
}
最佳答案
重要
如评论中所述,确保仅在需要时使用 flush_rewrite_rules。这是一项昂贵的操作,因此只有在绝对必要时才应使用。
问题
register_activation_hook()
在 init
和 plugins_loaded
操作之前运行。
register_deactivation_hook()
在 init
和 plugins_loaded
操作后运行。
如果您想处理数据库创建/删除内容,而不是当我们想要添加或清理重写规则时,这非常好。
大多数插件使用init
或plugins_loaded
操作来加载所有内容并生成重写规则。在此之前调用激活 Hook 。
停用 Hook 在周期的后期运行,因此您的 rewrite_rules 逻辑已处理并在停用时添加,没有任何内容被清除。
可能的解决方案
下面是一个非常基本的插件示例,它处理(取消)激活操作上的 flush_rewrite_rules。未经测试,我通过我正在构建的插件将其组合在一起。
<?php
/*
Plugin Name: Flush Rewrite Rules testing
Plugin URI: https://fake.com
Description: flsuh rewrite rules on activation/deactivation
Version: 0.0.1
Author: Bjorn
Author URI: https://fake.com
*/
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
register_activation_hook( __FILE__, 'frrt_activation');
register_deactivation_hook( __FILE__, 'frrt_deactivation');
add_action('init', 'frrt_flush_rewrite_rules');
function frrt_activation() {
if ( ! get_option( 'frrt_flush_rewrite_rules_flag' ) ) add_option( 'frrt_flush_rewrite_rules_flag', true );
}
function frrt_deactivation() {
flush_rewrite_rules();
}
function frrt_flush_rewrite_rules() {
if( get_option( 'frrt_flush_rewrite_rules_flag' ) ) {
add_filter('generate_rewrite_rules', 'frrt_generate_rewrite_rules');
flush_rewrite_rules();
delete_option( 'frrt_flush_rewrite_rules_flag' );
}
}
function frrt_generate_rewrite_rules($wp_rewrite) {
$wp_rewrite->rules = array_merge(
['some-base-url/([^/]+)/?$' => 'index.php?example_query_var=$matches[1]'],
$wp_rewrite->rules
);
}
在激活时设置一个标志(选项),这样我们就可以在 init
操作上生成和刷新重写规则。停用按预期进行,因为我们只在激活时生成重写规则。
我认为这根本不是理想的,因为我们在每个 init
操作上执行数据库查询 (get_option()
),其中 99,9999%时间不需要...但这是唯一对我有用的解决方法。
WP 不认为这是一个错误,请参阅 Trac ticket .
如果有人有更好的解决方案,请分享 ;-)。
关于wordpress - 如何在插件停用时运行 flush_rewrite_rules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21787785/
我找不到在来电时激活和停用振动的方法。 菜单中的选项 --> 设置 --> 声音和显示提到 - PHONE VIBRATE - 来电时手机振动... 我想通过代码激活和停用它(如果可能的话)。 最佳答
我有两个元素在彼此之上。当我点击第一个 div 上的按钮时,第二个 div 在第一个 div 之上打开,我想要做的是让底层 div 成为非交互式的(我不能点击底层 div 上的任何东西只要 overl
有没有办法取消 UIScrollView 的减速? 我想允许用户滚动 Canvas ,但我不希望用户抬起手指后 Canvas 继续滚动。 最佳答案 这可以通过利用 UIScrollView 委托(de
这里是关于 Stack Oveflow 的第一个问题,所以不要作恶! :) 言归正传:如果有堆叠的元素和堆叠的操作区域,如何继续操作以确保您对所看到的内容而不是底层元素进行操作? 我正在学习有关 Qt
这个问题已经有答案了: Deleting Objects in JavaScript (14 个回答) 已关闭 9 年前。 我有一个类,我通过以下方式调用: this.infiniteScroll =
我有一个优化问题,正在尝试使用 optaplanner 来解决。求解算法使用一组规则。引擎使用一个对象来捕获每个规则的权重。规则的最终得分是规则的中间得分乘以权重。分数设置在每条规则的右侧。每个规则的
有没有办法取消 UIScrollView 的减速? 我想允许用户滚动 Canvas ,但我不希望用户抬起手指后 Canvas 继续滚动。 最佳答案 这可以通过利用 UIScrollView 委托(de
我正在尝试更新 native android 应用程序,该应用程序以前是由其他一些人在某些跨平台技术(Titanium)中构建和上传的。应用程序以高级模式发布,其中针对平板电脑和手机有不同的构建。但现
我有一个 JList 列表和以下代码行: list.getInputMap().put(KeyStroke.getKeyStroke('d'), "action"); 因此,当我的列表处于焦点状态并且
有没有办法通过 SQL 语句停用 postgres 用户帐户? 我想阻止用户使用他们的数据库,但不删除用户或他们的数据库。 最佳答案 您还可以考虑 ALTER USER someone WITH NO
我有一个问题。我有一个 ViewController1,它通过 Push-segue 打开 ViewController2。//两者都是NavigationControllers - (void)pr
当我去 Playground 写 let test = "\u{062F}\u{0625} Hello" 时,我得到 Hello دإ(通过当我从输出控制台复制到这里时,我得到 دإ Hello) 似
我想通过扬声器播放歌曲,同时能够使用 Quickblox 接听视频通话。 我的音频速率越来越乱了。还有一个更大的问题是,当通话结束时,quickblox 框架将 Audio Session 设置为停用
我有一个工作项目,我以 tomcat 用户身份登录,但我不知道如何注销,我尝试停用 tomcat session ,我们使用 java spring,这是我尝试从 Controller : @Requ
我正在使用 javascript 来缩放我的 asp.net 网页上的图像。我想在上面放 2 个按钮,例如“缩放”、“取消缩放”,并相应地激活/停用 javascript 功能。现在我有一个 java
我有一个 TextField 和一个按钮。此 TextField 最多可包含 3 个字母或数字。 这是我的问题。当程序运行时,如果这个文本字段为空或者如果这个文本字段不只包含数字,我希望我的按钮被禁用
我有几个组,可以选择三个按钮。我试图做到这一点,以便当有人选择 N/A 按钮时,它会禁用其他两个按钮。当取消选择 N/A 按钮时,将启用其他两个按钮。我让它在我的机器上工作,其他两个按钮被着色为禁用,
HTML: Button Main Menu A Main Menu B
我是 php 新手,如何才能完成这项工作 删除.php prepare("UPDATE tbluser set status=1 WHERE id=:id"); $stmt->execute(
周五,我开始在运行 Ubuntu 14.04 的 VPS 上编写我的第一个 python API hello world 示例。我使用 python3,创建文件夹,virtualenv,激活它,然后断
我是一名优秀的程序员,十分优秀!