it-swarm.com.de

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

Haben Sie sich gefragt, ob es eine Klasse oder Programmiertechnik gibt, die es mir ermöglicht, die Installation und Aktivierung eines bestimmten Plugins zu überprüfen, und ob dieses Plugin nicht installiert wurde, 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 das gemacht werden kann.

7
Manny Fleurmond

Ich würde dagegen ermutigen, aber ich verstehe, was Sie versuchen, und mache 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 ...

Im Plugin wird benötigt von etwas anderem:

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

Im Plugin/theme benötigt das andere Plugin :

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 problemlos ü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 andere Option wurde bereits von @tollmanz empfohlen. Ich werde seine Lösung nicht kopieren und einfügen, aber wenn Sie überprüfen, ob eine Kernfunktion Ihres abhängigen Plugins vorhanden ist, können Sie sicherstellen, dass diese vorhanden ist.

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

Warum mache ich die Dinge so?

Erstens mag ich es nicht, wenn andere Tools zusätzliches Material auf meine Website herunterladen. Deshalb zwinge ich dieses Paradigma nicht anderen Benutzern auf. Stattdessen fordere ich sie auf, den zusätzlichen Code herunterzuladen und sie in die richtige Richtung zu weisen. Ein sauberer Weg wäre, sich an den automatischen Installer zu binden, damit er das Plugin mit einem einzigen Klick herunterlädt.

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

Wenn Sie mit dem Code einer anderen Person arbeiten, haben Sie keine Kontrolle darüber, wann sie neue Releases ausliefert, ob sie Bugs einführt oder wenn sie gehackt werden . Installieren Sie also nicht automatisch Code, für den Sie keine Verantwortung übernehmen können.

8
EAMann

Meine Methode, um mit einer ähnlichen Situation umzugehen, bestand darin, in der Plugin-Abhängigkeit nach einer Core-Klasse oder -Funktion zu suchen und zu überprüfen, ob sie existiert. Ich habe zum Beispiel ein Plugin erstellt, das vom Simple Term Meta-Plugin abhängt. Ich überprüfte es mit:

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

In meinem Plugin habe ich das Plugin einfach mit meinem Plugin gepackt. 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, wie der WP Core dies schafft und versuchen, etwas Wissen aus dem eingebauten System zu gewinnen.

5
tollmanz

Im Anschluss an die Benachrichtigungsidee von EAMann können Sie einen Link in eine Administratorbenachrichtigung einfügen, über den der Administrator zu einer Suchergebnisseite im Add Plugin weitergeleitet wird. Da der angegebene Name der genaue Name ist, wird er zuerst in den Ergebnissen aufgeführt. Sie müssen dann 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 Zugriff auf current_user_can () zu haben, müssen Sie warten, bis die Plugins geladen sind, daher die Aktion plugins_loaded. Das network_admin_url () gibt die richtige URL zurück, unabhängig davon, ob Ihre Site als Multisite eingerichtet ist oder nicht.

3
livearoha