Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Wordpress Plugin - Self-Hosted Update

Tags:

wordpress

I'm developing a Wordpress plugin that requires updates, although the plugin version is being checked from my server. There are several plugins that I have developed which use the exact same server to check for new versions. The problem I'm experiencing is that when all the plugins require an update and I click View Details, one of the plugins will show details of the update (version, description, and etc), but the other plugins won't show any information. After some debugging I can see that the server is returning data for sure.

My question is, how can I apply the plugins_api filter multiple times without it conflicting with the other plugins?

like image 964
Eypeon Avatar asked Aug 16 '11 06:08

Eypeon


1 Answers

Your observation is right. It is not obvious. Even the book of Brad and Ozh (Plugin development ed. Wrox) includes an error in the example on page 267 in the chapter "make your own API repository". Like you, I spent (lost) time to find the issue with a two plugins in alternate API...

The solution: Remember that that first parameter in the WP filter is the original value passed to the filter. So to concatenate the filters (listed by plugins using alternate api)... the first line must be:

function xiliw_altapi_information( $false, $action, $args ) {
    $plugin_slug = plugin_basename( __FILE__ );
        // Check if this plugins API is about this plugin
        if( $args->slug != $plugin_slug ) {
            return $false; // var to conserve the value of previous filter of plugins list in alternate api. fixes book error not val false
        }

        // POST data to send to your API
        $args = array(
            'action' => 'plugin_information',
            'plugin_name' => $plugin_slug,
            'version' => $transient->checked[$plugin_slug],
            'registration' => $this->registration
        );//../..

By doing this test, each time the list of hooks is called, only one - the concerned plugin - gives the right answer to display the information for the splash window.

If I have time, I probably will publish soon a more complete article about a class to manage this alternate powerful API and how to add it to a -private- plugin.

like image 51
dev.xiligroup Avatar answered Sep 21 '22 12:09

dev.xiligroup