mit php/js elemente ersetzen

  • Hi.

    Eine Bekannte von mir hat folgendes Problem:

    Zitat

    Es geht darum innerhalb dieses div

    <div class="postsingle"> </div>

    alles zu durchsuchen und die Zahlen 400 zu 600, sowie 225 zu 300 zu ersetzen.

    Wie macht man das?

    Das ist hier zwar kein php oder js Forum, da hier aber immer so nett und kompetent geholfen wird und die Zeit leider knapp ist, dachte ich, ich frag hier einfach auch mal nach.

    Wie macht man das nun?

    Das preg_replace Manual von php habe ich mir auch mal angeschaut, komme aber auf keinen grünen Zweig, weil meine php Kenntnisse eher gegen 0 tendieren. ;)

    Wär cool, wenn ihr uns unter die Arme greifen könntet! :)

    • 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

  • ich nehm an

    class="postsingle" steht vor dem the_content in der single.php

    da gibts ein Plugin search&replace vom Frank Bueltge - installieren und unter Einstellungen genau auswählen wo das Ding suchen und ersetzen sollte!

    es erfolgt ein direkter Eingriff in die Datenbank-daher vorher unbedingt ein Datenbankbackup machen ..
    ist der Blog ein bisschen größer dann mit MySQL Dumper - das Backup tool ist phänomenal simple ;)

    lg

  • Ja, deine Vermutung ist richtig. :D

    Aber das S&R Plugin ist glaube ich nicht das, was gesucht wird.
    Denn es soll nicht nur einmalig etwas ersetzt werden, sondern permanent.

    Und auch nur auf den single.php und page.php Seiten, wo die einzelnen Posts eben in einem DIV mit der Klasse "singlepost" stecken.

    (Der Hintergrund ist der, die Größe von eingebetteten Videos auf der Einzelansicht eines Posts oder einer Seite zu verändern.)

    Puh... gar nicht so einfach... :confused:

  • Hm. Hast Du evtl. noch eine Idee?
    Könnte das mit Filtern gehen?

    (Wovon ich zwar auch nur Bahnhof verstehe, aber dann hätte man wenigstens mal eine zweiten Lösungsansatz.)

  • Wayne: ich hab die Lösung! :D

    Musste dazu zwar am Wordpress Core was machen, aber ich hab mir die Funktion "the_content" direkt vorgeknöpft.

    PHP
    function the_content($more_link_text = null, $stripteaser = 0, $more_file = '') {
    	$content = get_the_content($more_link_text, $stripteaser, $more_file);
    	$content = apply_filters('the_content', $content);
    	$content = str_replace(']]>', ']]&gt;', $content);
    	echo $content;
    }

    wurde zu:

    PHP
    function the_content_single($more_link_text = null, $stripteaser = 0, $more_file = '') {
    	$content = get_the_content($more_link_text, $stripteaser, $more_file);
    	$content = apply_filters('the_content', $content);
    	$content = str_replace(']]>', ']]&gt;', $content);
    	$b = str_replace( array(300, 225), array(600,400), $content);
    	echo $b;
    }

    Im Theme rufe ich dann eben the_content_single auf, anstelle von the_content. Ein direktes Einbinden der Funktion ins Theme hat leider nicht geklappt – stört aber nicht weiter. Notiere mir einfach die Änderungen und fixe das bei einem Update manuell.

    Jetzt darf ich zwar nie wieder die Zahlen 300 und 225 verwenden, aber das bekomm ich schon hin! :D

  • Nimm dann doch besser nen Filter: ;-)

    PHP
    function replace_numbers( $content ) {
       return str_replace( array(300, 225), array(600,400), $content); 
    }
    add_filter( 'the_content', 'replace_numbers' );


    Entweder in die functions.php des Themes oder als eigenes Plugin.

  • Der Filter wirkt sich dann aber auf jeden content aus. Das ist doch das Problem. Ich möchte ja auf der Index und auf Single eine unterschiedliche Darstellung des gleichen Videos.

    e: ich hab mich oben auch missverständlich ausgedrückt. Es sollte nicht "wurde zu" heissen, sondern "wurde kopiert zu". die normale "the_content" funktion nutze ich ja noch auf der index.php ;)

  • Der Filter wirkt sich dann aber auf jeden content aus. Das ist doch das Problem. Ich möchte ja auf der Index und auf Single eine unterschiedliche Darstellung des gleichen Videos.


    Mit Conditional Tags kommst du da weiter:

    Code
    function replace_numbers( $content ) { 
       return str_replace( array(300, 225), array(600,400), $content);  
    } 
    [COLOR="Red"]if ( is_single() ) {[/COLOR]
      add_filter( 'the_content', 'replace_numbers' ); 
    [COLOR="#ff0000"]}[/COLOR]
  • Hm... das funktioniert leider nicht. Da tut sich überhaupt nichts.
    Ist aber in Ordnung. Kann schon damit leben, was an den Includes geändert zu haben. :)

    Kennst Du dich eigentlich gut mit den Regulären Ausdrücken von php aus?

  • Was willst du denn wissen?

    Jetzt wird ja im gesamten Content gesucht und alle 300er und 225er ersetzt. Cool wäre halt, wenn wirklich nur exakt an der Stelle gesucht würde, wo die Größenangaben der Videos sind, die verändert werden sollen. (achja, es geht um Videos – das hab ich hier noch gar nicht erwähnt, oder? ;))

    Wenn mal doch irgendwo noch eine 300 oder eine 225 vorkommen sollte, z.B. bei der Größenangabe eines Bildes, das aber nicht verändert werden soll, blieben die dann unangetastet.

    Hier ist der Code von so einem Video:

    PHP
    <span class="vvqbox vvqvimeo" style="width:300px;height:225px;"><span id="vvq-35-vimeo-1"><a href="http://www.vimeo.com/3846698">http://www.vimeo.com/3846698</a></span></span>
    
    
    <script type="text/javascript">
    	swfobject.embedSWF("http://www.vimeo.com/moogaloop.swf", "vvq-35-vimeo-1", "300", "225", "9", vvqexpressinstall, { "wmode": "opaque", "allowfullscreen": "true", "server": "www.vimeo.com", "clip_id": "3846698", "show_portrait": "0", "show_title": "0", "show_byline": "0", "fullscreen": "1", "color": "FFFFFF" }, vvqparams, vvqattributes);
    </script>

    Würdest Du das hinbekommen? Leider sprengen die RedExp mein php Wissen absolut –*das brauch ich gar nicht erst versuchen, hehe...

  • Ich nehm mal an, dass hier ist immer gleich?

    HTML
    <span class="vvqbox vvqvimeo" style="width:300px;height:225px;">


    Dann erweitere einfach dein str_replace:

    PHP
    return str_replace( '<span class="vvqbox vvqvimeo" style="width:300px;height:225px;">', '<span class="vvqbox vvqvimeo" style="width:600px;height:450px;">', $content);


    Regex brauchst du nur, wenn du nicht weißt ob da eine 300 oder irgendwas anderes steht. Bei konstanten Ausdrücken genügt auch str_replace(). In beiden Fällen benötigst du aber eine Art "Muster" an dem du den Suchstring erkennst.

Jetzt mitmachen!

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