Wie würden Sie abhängige Plugins benötigen und automatisch herunterladen?


7

Haben Sie sich gefragt, ob es eine Klasse oder Programmiertechnik gibt, mit der ich die Installation und Aktivierung eines bestimmten Plugins überprüfen und wenn das Plugin nicht installiert ist, um es aus dem Plugin-Repository von WordPress herunterzuladen?

Ich habe ein Plugin, für das ich das Post 2 Post-Plugin von scribu benötigen möchte, und ich habe mich gefragt, wie es gemacht werden kann.

Antworten:


8

Ich würde dagegen ermutigen, aber ich verstehe, was Sie versuchen, und mache selbst etwas Ähnliches.

Wie ich es mache

Ich erstelle Themen, die von Plugins abhängen, Plugins, die von Plugins abhängen, und Plugins, die von Plugins abhängen, die von anderen Plugins abhängen. Wenn ich beide Seiten der Entwicklung kontrolliere, mache ich Dinge in zwei Teilen ...

In dem Plugin, das von etwas anderem benötigt wird:

add_filter( 'my-cool-plugin-name-installed', '__return_true' );

In dem Plugin / Theme, für das das andere Plugin erforderlich ist :

if ( ! apply_filters( 'my-cool-plugin-name-installed', false ) )
    add_action( 'admin_notices', 'my-cool-plugin-name_not_installed' );

Dann füge ich oben auf dem Admin-Bildschirm einen hellen Hinweis "Bitte installiere mein supercooles Plugin" mit einem Link zur Download-Seite hinzu.

Auf diese Weise kann ich auf todsichere Weise überprüfen, ob meine Abhängigkeiten vorhanden und installiert sind. Wenn das Plugin installiert, aber nicht aktiviert ist, wird die Warnung weiterhin angezeigt.

Ein anderer Weg

Eine weitere Option wurde bereits von @tollmanz empfohlen. Ich werde seine Lösung nicht kopieren und einfügen, aber die Überprüfung der Existenz einer Kernfunktion Ihres abhängigen Plugins ist eine gute Möglichkeit, um sicherzustellen, dass sie vorhanden ist.

Wenn das Plugin installiert, aber inaktiv ist, erkennt diese Route erneut nur, ob es aktiv ist.

Warum mache ich das so?

Erstens mag ich es nicht, wenn die Tools anderer Leute zusätzliche Inhalte auf meine Website herunterladen. Daher zwinge ich dieses Paradigma nicht anderen Benutzern auf. Stattdessen fordere ich sie auf, den zusätzlichen Code herunterzuladen und in die richtige Richtung zu weisen. Eine sauberere Möglichkeit wäre, sich mit dem automatischen Installationsprogramm zu verbinden, damit das Plugin mit einem einzigen Klick heruntergezogen werden kann.

Außerdem befinden sich mehrere Benutzer meines Codes auf Servern, auf denen sie das Ein-Klick-Installationsprogramm (oder automatisierte Downloads überhaupt) nicht verwenden können. Sie müssen FTP-Plugins verwenden, um sie zu installieren, damit ein stilles Herunterladen und Aktivieren eines Abhängigkeitssystems überhaupt nicht funktioniert.

Wenn Sie mit dem Code einer anderen Person arbeiten, haben Sie keine Kontrolle darüber, wann diese neue Versionen versendet, ob sie Fehler einführen oder ob sie gehackt werden . Installieren Sie also nicht automatisch Code, für den Sie keine Verantwortung übernehmen können.


Okay, du machst einen guten Punkt. Daher sollte ich vorsichtig sein und nach der Verwendung fragen, um das Plugin zu installieren. Ich würde einen nahtloseren Ansatz bevorzugen und den Benutzer nicht über Abhängigkeiten beunruhigen lassen. Ich habe auch darüber nachgedacht, nur das andere Plugin zu bündeln, aber dann würde es nicht aktualisiert, wenn ich das täte.
Manny Fleurmond

Der nahtlose Ansatz besteht darin, das Aktivieren von Posts2Posts zu überprüfen, wenn Sie Ihr Plugin aktivieren, und den Benutzer aufzufordern, es vor dem Aktivieren sofort herunterzuladen, falls es nicht vorhanden ist. Dies würde alles auf einem Bildschirm passieren und sie würden es nie wieder tun müssen.
EAMann

5

Meine Methode, um mit einer ähnlichen Situation umzugehen, bestand darin, in der Plugin-Abhängigkeit nach einer Kernklasse oder -funktion zu suchen und zu überprüfen, ob diese vorhanden ist. Zum Beispiel habe ich ein Plugin erstellt, das vom Simple Term Meta-Plugin abhängt. Ich habe es überprüft mit:

if(!function_exists('simple_term_meta_install'))
{
    // Do stuff to download plugin
}

In meinem Plugin habe ich das Plugin einfach mit meinem Plugin verpackt. Ich würde es nur ausführen, wenn es nicht bereits installiert wäre.

Sie können den Benutzer auch auffordern, das Plugin herunterzuladen und zu installieren.

In Bezug darauf, wie Sie es automatisch herunterladen würden ... Ich weiß es nicht. Ich würde schauen, um zu sehen, wie der WP-Kern dies verwaltet, und versuchen, etwas Wissen aus dem eingebauten System zu gewinnen.


3

Im Anschluss an die Benachrichtigungsidee von EAMann können Sie in einer Administratorbenachrichtigung einen Link hinzufügen, der den Administrator zu einer Suchergebnisseite im Add Plugin führt. Da der angegebene Name der genaue Name ist, wird er zuerst in den Ergebnissen aufgeführt. Dann müssen Sie nur noch auf den Link Jetzt installieren klicken.

function posts_2_posts_required() {
    $url = network_admin_url( 'plugin-install.php?tab=search&type=term&s=Posts+2+Posts&plugin-search-input=Search+Plugins' );
    echo '
    <div class="error">
        <p>The <a href="' . $url . '">Posts 2 Posts Plugin</a> is required.</p>
    </div>
    ';
}

function check_required_plugins() {
    if ( current_user_can( 'activate_plugins' ) ) {
        include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
        if ( ! is_plugin_active( 'posts-2-posts/posts-2-posts.php' ) )
            add_action( 'admin_notices', 'posts_2_posts_required' );
    }
}
add_action( 'plugins_loaded', 'check_required_plugins' );

Um auf current_user_can () zugreifen zu können , müssen Sie warten, bis die Plugins geladen sind, daher die Aktion plugins_loaded. Die network_admin_url () gibt die richtige URL zurück, unabhängig davon, ob Ihre Site als Multisite eingerichtet ist oder nicht.


Dies ist eine nette Lösung, die Sie jedoch after_setup_themeanstelle von verwenden sollten, plugins_loadedda Sie möglicherweise keine Plugins verwenden.
Fireydude
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.