0

I'm trying to look around over Google of how to hook the add_action and change the priority of Yoast Canonical,

from: 20

add_action( 'wpseo_head', array( $this, 'canonical' ), 20 );

to: 55

add_action( 'wpseo_head', array( $this, 'canonical' ), 55 );

This affect the position from the frontend head tag section. Is there a way to manipulate this function to hook it inside my functions.php file?

Note: I tried to copy and paste this to my function, but hook is not reaching the action.

Updated Response Fig. 1

global $wpseo;
$wpseo = new WPSEO_Frontend();

remove_action( 'wpseo_head', array( $wpseo, 'canonical' ), 20 );
add_action( 'wpseo_head', array( $wpseo, 'canonical' ), 55 );

I tried using this as I can see the WPSEO_Frontend was the declared class where the add_action( 'wpseo_head', array( $wpseo, 'canonical' ), 20 ); is located... But ended-up to broken site.

closed as off-topic by Mark Kaplun, cjbj, shea, Nicolai, bueltge Oct 15 '17 at 20:36

This question appears to be off-topic. The users who voted to close gave this specific reason:

If this question can be reworded to fit the rules in the help center, please edit the question.

  • Seems like intimate knowledge with wpseo is required to answer this question which makes it a better fit to their support channel than here. Anyway your code is not what @majick had suggested. it is also possible that you do not place it at right filter. – Mark Kaplun Sep 28 '17 at 17:17
  • Hi Mark, Yeah, I actually contacted their support but they cannot also give me some dev info regarding what I need to override that canonical. They just give me a go signal to freely modified the plugin, but the question is, what will happen if someone updated the premium plugin of Yoast... For sure it will overwrite my simple code there again. – iMarkDesigns Sep 28 '17 at 20:28
  • 1
    yes, I am amazed they even suggested that.... – Mark Kaplun Sep 28 '17 at 20:34
2

You would need to look in the Yoast plugin to find what the global class is that is referred to as $this, so that you can access it outside the class context. If it was for example, $wpseo, in your functions.php you could do something like:

$wpseo = WPSEO_Frontend::get_instance();
remove_action( 'wpseo_head', array( $wpseo, 'canonical' ), 20 );
add_action( 'wpseo_head', array( $wpseo, 'canonical' ), 55 );

To find the class name to use, look for the name of the class that contains the add_action with $this in it as you have already, and then get the instance of that class, like $wpseo = WPSEO_Frontend::get_instance();

UPDATE changed code to reflect actual found and tested class instance.

  • Thank you for your answer... I tried to dig deeper on the plugin but I ended up to broken WP site... I update my question including the test flow of your suggestion. – iMarkDesigns Sep 28 '17 at 16:56
  • on a quick look, seems like they don't use a global there so don't use that, just try $wpseo = WPSEO_Frontend::get_instance(); instead and don't do new WPSEO_Frontend(); – majick Sep 28 '17 at 21:18
  • 1
    I can confirm that this worked with $wpseo = WPSEO_Frontend::get_instance(); followed by your answer above. Thanks for this. @majick – iMarkDesigns Dec 18 '17 at 20:10

Not the answer you're looking for? Browse other questions tagged or ask your own question.