Support » Plugin: Jetpack - WP Security, Backup, Speed, & Growth » maybe_clear_other_linked_admins_transient() problem

  • Resolved realj42

    (@realj42)


    Hi _ I recently upgraded to 4.3.2 of Jetpack but it seems to be conflicting with my site. I am using WP-eMember to manage a membership site, and now it looks like all non-admin WP users are being rejected on login with the following warning popping up.

    Warning. Missing argument for Jetpack::maybe_clear_other_linked_admins_transient() in [path]plugins/jetpack/class.jetpack.php at line 927.

    The site PHP version is 5.4.21.

    I am going to try disconnecting from jetpack and/or rolling back to see if that fixes it, Any suggestions for a permanent fix much appreciated.

    Cheers

Viewing 7 replies - 1 through 7 (of 7 total)
  • Plugin Author Jeremy Herve

    (@jeherve)

    Jetpack Mechanic πŸš€

    Is this the plugin you’re using? Since it’s a Premium plugin I can’t download its code to test things on my end. Would you mind searching in that plugin folder for all mentions of the set_user_role action?https://codex.wordpress.org/Plugin_API/Action_Reference/set_user_role

    You’ll most likely find lines that look like this:

    add_action( 'set_user_role', 'XXXXX'

    Where XXXXX is a specific function name. Could you then copy both the line that starts with add_action, and the whole XXXXX function that you should find later in that same file, like so:

    function XXXXX(
    ...
    }

    Thanks!

    Thread Starter realj42

    (@realj42)

    Hi Jeremy, thanks for getting back to me. Firstly I have fixed the issue for now by rolling back to version 4.3.1 of Jetpack. Also I noticed that the ‘test connection’ feature of Jetpack found failures under 4.3.2, but these disappeared under 4.3.1.

    To answer your specific question, yes that is the correct plugin. I only found one (non comment) line referencing ‘set_user_role’ within the plugin

    function update_wp_user_Role($wp_user_id, $role) {
    ..
    ..
        do_action('set_user_role', $wp_user_id, $role); //Fire the action for other plugin(s)

    There are no ‘add_action()’ lines in the plugin for ‘set_user_role’.

    Let me know if you need anything else.
    Cheers

    Plugin Author Jeremy Herve

    (@jeherve)

    Jetpack Mechanic πŸš€

    do_action('set_user_role', $wp_user_id, $role);

    That’s most likely what’s causing the issue. This action, as defined by WordPress Core itself, accepts 3 different arguments:
    https://github.com/WordPress/WordPress/blob/4.6.1/wp-includes/class-wp-user.php#L584-L594

    The last argument, $old_roles, was added to WordPress in WordPress 3.6.0. Unfortunately, it seems WP-eMember wasn’t updated to take that third argument into account. As a result, all other plugins hooking into the set_user_role action will throw an error as long as WP-eMember is active.

    To solve this issue, WP-eMember would have to add a third argument, to allow other plugins to use it.

    Could you contact the WP-eMember team and ask them to take a look at the issue?

    Let me know how it goes.

    Thread Starter realj42

    (@realj42)

    The ‘$old_roles’ parameter is marked as optional in the codex – https://codex.wordpress.org/Plugin_API/Action_Reference/set_user_role
    which must be the case when extending an existing function for back-compatibility. However JetPack is linking in action function – maybe_clear_other_linked_admins_transient( $user_id, $role, $old_roles ) for set_user_role where $old_roles is NOT optional. (line 927 of class.jetpack.php) so breaking back-compatibility.

    OK I can fix this for now and raise with the plugin writer as well – should be easy enough. You may want to add this plugin incompatibility to the Jetpack support docs.

    Cheers

    Thread Starter realj42

    (@realj42)

    Just to verify I have fixed my copy of WP-eMember and added the $old_roles parameter. I now have no issues with JetPack 4.3.2.

    Thanks for the help.
    Cheers

    Plugin Author Jeremy Herve

    (@jeherve)

    Jetpack Mechanic πŸš€

    Excellent, I’m glad to hear you could get this fixed!

    We’ll also patch Jetpack in the next release; you can follow our progress on this here:
    https://github.com/Automattic/jetpack/pull/5486

    Thread Starter realj42

    (@realj42)

    Good stuff. Turns out that the WP-eMember plugin does not need to invoke do_action('set user role'...) as it calls wp_update_user() to set the new role, and of course that already invokes the ‘set_user_role’ hook chain with all three parameters, as you pointed out earlier. I have already removed the call completely from my version of WP-eMember.

    Cheers

Viewing 7 replies - 1 through 7 (of 7 total)
  • The topic ‘maybe_clear_other_linked_admins_transient() problem’ is closed to new replies.