Variable eines Plugins in einem andere nutzen?

  • Hallo,

    ich würde gerne meine webseiten mit dem global translater plugin übersetzen lassen. Das klappt soweit, bis auf die meta description. Diese wird vom all in one seo plugin wohl wieder überschrieben und ist dann auf den übersetzten Seiten in deutsch.

    in der translator.php vom global translation plugin hab ich das gefunden:

    PHP
    $buf = preg_replace("/<meta name=\"description\"([ ]*)content=\"([^>]*)\"([ ]*)\/>/i", "", $buf);
      $buf = preg_replace("/<meta name='description'([ ]*)content='([^>]*)'([ ]*)\/>/i", "", $buf);



    das bedeutet doch eigentlich, dass sobald eine translation durchgeführt wird, diese wieder gelöscht werden sollte? naja wie auch immer, es wird nix gelöscht, also dachte ich mir, ich definiere eine globale variable in dieser function:

    PHP
    global $zielsprache;
      $zielsprache = $lang;



    Im All in one seo paket schreibe ich dann:

    if ($zielsprache == 'de') {
    if (is_single() || is_page()) {
    $meta_string .= sprintf("<meta name=\"description\" content=\"%s %s\" />", $seotitel, $description);
    }else {
    $meta_string .= sprintf("<meta name=\"description\" content=\"%s\" />", $description);
    }
    }

    Es funktioniert aber nicht. das all in one seo plugin kennt die $zielsprache überhaupt nicht. Was kann ich hier tun?
    Wenn ich in einem plugin eine variable als global defniere, dann ist die doch auch in einem anderen plugin einbindbar oder nicht?
    danke

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • und wo wird die reihenfolge definiert?

    Dort, wo das jeweilige Plugin es wünscht. Die beiden wesentlichen Funktionen heißen add_filter() und add_action(). Hier ist es jeweils der dritte Parameter.
    Wenn das SEO-Plugin eine Variable aus einem vorhergehenden kennen soll, mußt du also seine Priorität herabsetzen und den Parameter beispielsweise aus 12 stellen (höhere Zahl = niedrigere Priorität).

    Whoppy: Wenn das SEO-Plugin das Translatorplugin einbindet, dann wird es zweimal ausgeführt, oder etwas anderes geht schief. Das halte ich für einen schlechten Weg.

  • also leute, ich komm hier einfach nicht weiter. 2 Tage sitze ich jetzt schon von morgens bis abends an diesem ding und komme nicht weiter.

    egal was man durchreicht ob session global etc, nichts lässt sich verwenden. ich kann jetzt hier keine weitere zeit mehr verbrennen. würde mir jemand der die struktur von wordpress versteht für paar euro (gerne paypal) helfen? kann sofort ftp durchgeben..danke

  • also das lässt mir natürlich keine Ruhe.

    in der all in one seo ist add_action so definiert:

    add_action('wp_head', array($aiosp, 'wp_head'));

    im translation plugin so

    add_action('parse_query', 'gltr_insert_my_rewrite_parse_query',-1);//this action should have the maximum priority!

    ich hab mit dem 3ten parameter (priorität) bei beiden gespielt. Hat nix gebracht!

    Nochmal die Anfangsfrage. Wie kann ich eine Variable welche ich in einem plugin definiere in einem anderen plugin nutzbar machen?

  • wenn ich das umsetze und mit dann die source der übersetzen seite ansehe, ist die meta description noch vorhanden.

    was ich möchte ist entweder, dass die meta description übersetzt wird wie alles andere auf der seite auch oder das die meta description entfernt wird. Weil ne übersetze Seite mit ner deutschen Beschreibung kommt nicht gut.

    Selbst wenn ich das all in one seo plugin deaktiviert habe und im header eine händische meta desc einfüge, löscht der translater die desc nicht, obwohl er das hier intus hat:

    PHP
    $buf = preg_replace("/<meta name=\"description\"([ ]*)content=\"([^>]*)\"([ ]*)\/>/i", "", $buf);
      $buf = preg_replace("/<meta name='description'([ ]*)content='([^>]*)'([ ]*)\/>/i", "", $buf);



    wenn schon das automatische löschen des translaters nicht funktioniert, möchte ich über den translater eine variable generieren welche ich dann im all in one seo um den meta desc Aufruf legen kann.

  • jetzt haben wir schon Tag nummer 4 und ich sitze immer noch von morgens bis abends dran heraus zu finden wie ich eine blöde variable nutzbar machen kann.

    ich will doch lediglich, dass diese meta description verschwindet und versuche im translater eine global variable zu erstellen und diese per "if abfrage" in einem anderen plugin (all in one Seo) zu nutzen.

    warum ist das denn so schwer...das traurige ist, die Lösung dauert wohl nicht länger als 1 Minute und ich sitze schon über 72 Stunden dran. zum k......:x

  • Wo wird denn die Variable genau erstellt? Im Plugin, im Post-Editor, im Theme? In den beiden letzten Fällen entsteht sie erst, wenn alle Plugins schon längst fertig sind.

    Im einfachsten Fall legst du eben für jeden Text ein Custom Field an, das du im Theme abfragst und als Beschreibung verwendest.

  • Hallo,

    danke für deine Antwort.

    Das mit den Customfields hab ich bei meinem Blog mit nur 10 Seiten mal probiert und das funktioniert soweit aber ich würde das halt gerne auch in meinen anderen blogs mit ca. 1400 Beiträgen verwenden und da tue ich mir jetzt etwas schwer für alle noch custom metas zu schreiben.

    zu deiner ersten Frage. Die Variable wird im Plugin selbst erstellt. also ich erstelle z.b. im translator.php plugin eine variable als global und möchte das ich diese dann in einem anderen plugin (all in one seo) verwenden kann. egal wie ich die reihenfolge einstelle, die variable ist nicht nutzbar. könntest du mir sagen, wie ich eine variable in einem plugin erstelle, damit diese auch in den anderen plugins einbindbar ist?

  • ich bin hier kurz davor aus dem Fenster zu springen...5 Tage an sitze ich nun an dieser simplen Abfrage, man man man

    bin ein stück weiter aber es klappt trotzdem nicht.

    in das plugin translater habe ich nun:

    PHP
    add_option("malsehen", '', '', 'yes');

    eingefügt.

    in das plugin wo die description geladen wird:

    PHP
    $bittegeh = get_option('malsehen'); 
                 if (!$bittegeh) {
                if (is_single() || is_page()) {
                $meta_string .= sprintf("<meta name=\"description\" content=\"%s %s\" />", $seotitel, $description);
                }else {
                $meta_string .= sprintf("<meta name=\"description\" content=\"%s\" />", $description);
                }
               }

    auch das funktioniert nicht...kann mir wenigstens mal jemand sagen ob es überhaupt möglich ist?

  • So, das hat mir keine Ruhe gelassen. Ich habe mich gewundert, warum ich noch nie auf dieses Problem gestoßen bin, bis mir eingefallen ist, daß ich immer mit Objekten arbeite und nie mit globalen Variablen.

    Dies funktioniert:

    [SIZE="4"]Plugin 1[/SIZE]

    PHP
    <?php
    /*
    Plugin Name: Variablentest 1
    Description: Setzt eine Variable $test, die im zweiten Plugin aufgerufen und vor den Artikelinhalt gestellt wird.
    */
    class Var_Test {
    	public $test = 'Bingo!';
    }

    [SIZE="4"]Plugin 2[/SIZE]

    Jetzt beginnt jeder Artikel mit:

    HTML
    <h1>Bingo!</h1>

    Der Inhalt der Variablen ist also global zugänglich, verpestet aber nicht den globalen Namensraum.
    Hilft dir das?

    Gruß
    Thomas

  • Hallo,

    ok, Tag Nr. 6!

    erstmal danke toscho, dass Du dir die Mühe gemacht hast mein Problem nach zu vollziehen. Ich habe es jetzt ähnlich aufgebaut trotzdem funktioniert es für mich unverständlicherweise noch nicht. Es muss mit etwas zu tun haben, dass ich so noch nie im php erlebt hab. Hier mal meine Schritte, ganz von vorne, ohne globale variablen. ich hoffe du hast Zeit zum lesen:

    1. ich habe eine Datei erstellt names durchreicher.php mit dem Inhalt:

    PHP
    <?php
    class durchreicher
    {
      var $is_translated='yes';
    }
    ?>



    2. Plugin 1 - Im translation.php plugin habe ich dann ganz oben folgendes eingefügt:

    PHP
    if ($_SERVER['REDIRECT_URL']=='/en/')
    {
    include (dirname(__file__).'/durchreicher.php');
    $obj = new durchreicher();
    }



    (per print_r habe ich die Pfade verifiziert und mit echo ein paar tests gemacht. in der If Abfrage bewirkt z.B. echo "test"; exit; , dass auch test aufgrufen wird. d.h. für mich, dass die If Abfrage schonmal funktioniert)

    3. Plugin 2 - ich habe die all in one seo.php dort wo die meta description eingebunden wird mit folgendem ausgestattet:



    Zusammenfassung:

    Wenn der Durchreicher included wurde und das ist nur der Fall wenn das Subdirectory z.B /en/ ist, dann gebe keine meta description aus. Wenn das Subdirectory nicht /en/ ist sonder else also z.b. / dann lade die Description.

    Fakt: Wordpress lädt trotzdem bei /en/ und bei / die meta Description.
    Die meta Description kann doch aber nur geladen werden, wenn für die all in one seo.php der Durchreicher "false" ist oder halt "true" wie man es nimmt.

    Es ist aber so, dass ihn das wohl nicht interessiert und an irgendeiner Stelle der Durchreicher wieder false wird. Warum? ich würde das so gerne verstehen....

  • Ich habe irgendwie das Gefühl, daß dein ganzer Ansatz schief läuft. Zunächst einmal stört mich, daß du den Code der Plugins anfaßt: Wie willst du denn ein vernünftiges Update einspielen?

    Dann sollte die Ausgabenlogik dort abgehandelt werden, wo sie hingehört: im Template.

    Ich würde das Problem daher in der functions.php des Templates abfangen:

    PHP
    function fix_translated_desc($desc)
    {
    	if ( 0 === strpos($_SERVER['REQUEST_URI'], '/en/') )
    	{
    		return '';
    	}
    	return $desc;
    }
    add_filter('aioseop_description', 'fix_translated_desc');

    Getestet habe ich das freilich nicht; mein Spielblog hat gerade anderes zu tun, und lokal funktioniert der Übersetzer nicht.

    Überhaupt würde ich das Global-Translator-Plugin niemals irgendwo einsetzen. Übelster Spaghetticode, der ohne Vorbehandlung auch noch dem dümmsten Deppen Tür und Tor öffnet. Von XSS hat der Autor wohl noch nie gehört …

  • ok, plugin wird nicht mehr angefasst. Das mit der function.php hat nicht geklappt. Leider...

    Hab jetzt mal im header.php folgendes probiert, denn mittlerweile wäre es für mich auch ok, wenn wp_head einfach nicht geladen wird bei /en/ aber nicht mal das funktioniert...weisst du warum? kannst du mir sagen wie ich es schaffe, dass bei /en/ wp_head(); nicht geladen wird. So muß man die plugins auch nicht kennen. Danke!:

    PHP
    <?php 
    if (substr($_SERVER['REQUEST_URI'],0,4) != "/en/") 
    { 
    wp_head();
    } ?>

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!