Keep custom fix in a plugin

时间:2021-04-21 作者:Zeth

我有一个插件,需要一个(非常)定制的功能,为我的网站。我在代码中找到了它,在那里我可以删除一些代码行,因此该功能可以按照我的意愿进行访问。但我不确定将来如何维护此自定义修复。

没有固定的挂钩。

问题如果插件已更新,则修复程序将消失

进一步细化,这是一种权限问题,在这种情况下,自定义用户类型可以访问功能(下载包单),但功能非常少。

所以我要做的是改变这一点:


...
...
...

// check if user is logged in
if ( ! is_user_logged_in() ) {
    $allowed = false;
}

// Check the user privileges
if( !( current_user_can( \'manage_woocommerce_orders\' ) || current_user_can( \'edit_shop_orders\' ) ) && !isset( $_GET[\'my-account\'] ) ) {
    $allowed = false;
}

// User call from my-account page
if ( !current_user_can(\'manage_options\') && isset( $_GET[\'my-account\'] ) ) {
    // Only for single orders!
    if ( count( $order_ids ) > 1 ) {
        $allowed = false;
    }

    // Check if current user is owner of order IMPORTANT!!!
    if ( ! current_user_can( \'view_order\', $order_ids[0] ) ) {
        $allowed = false;
    }
}
对此:

// check if user is logged in
if ( ! is_user_logged_in() ) {
    $allowed = false;
}

// // Check the user privileges
// if( !( current_user_can( \'manage_woocommerce_orders\' ) || current_user_can( \'edit_shop_orders\' ) ) && !isset( $_GET[\'my-account\'] ) ) {
//  $allowed = false;
// }
// 
// // User call from my-account page
// if ( !current_user_can(\'manage_options\') && isset( $_GET[\'my-account\'] ) ) {
//  // Only for single orders!
//  if ( count( $order_ids ) > 1 ) {
//      $allowed = false;
//  }
// 
//  // Check if current user is owner of order IMPORTANT!!!
//  if ( ! current_user_can( \'view_order\', $order_ids[0] ) ) {
//      $allowed = false;
//  }
// }

1 个回复
最合适的回答,由SO网友:butlerblog 整理而成

正如@kero所指出的,您最好的选择是联系开发人员,询问他们是否愿意包含适当的挂钩-您需要的是一个过滤器,以允许自定义$allowed.

然而,除此之外,一个潜在的(尽管不是完美的)解决方案是忽略插件的更新。您可以按以下方式进行操作:

function filter_plugin_updates( $value ) {
    unset( $value->response[\'some_plugin/some_plugin.php\'] );
    return $value;
}
add_filter( \'site_transient_update_plugins\', \'filter_plugin_updates\' );
然后,您将无法获得插件的更新通知或自动更新。这将允许您手动将更改重新应用到更新并手动处理。

显然,如果你能让开发人员带上一个过滤器挂钩,你就更好了。但如果您手动处理事情,这可以防止您无意中破坏自定义。