Ankündigung

Einklappen
Keine Ankündigung bisher.

Wordpress Custom post_gallery Funktion gibt nichts zurück

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wordpress Custom post_gallery Funktion gibt nichts zurück

    Hallo,

    mein custom Wordpress Gallery via post_gallery Hook ist nach dem Update von PHP5.x auf 7.3 broken. Das hat mich grundsätzlich wenig gewundert. Das Fehlerbild ist jedoch bizarr:

    echo gibt in jedem Fall die gesamte Galerie brav aus wohingegen return nur etwas liefert, wenn es maximal "um die" 60 Bilder im gesamten Post gibt. Genauer kann ich das leider nicht spezifizieren, weil es sich von Post zu Post unterscheidet (Bildgröße?).

    Habt ihr eine Idee (php.ini, apache.conf Restriktionen)? Merci!

    PHP-Code:
    function my_post_gallery($output$attr) {
        global 
    $post;

        if (isset(
    $attr['orderby'])) {
            
    $attr['orderby'] = sanitize_sql_orderby($attr['orderby']);
            if (!
    $attr['orderby'])
                unset(
    $attr['orderby']);
        }

        
    extract(shortcode_atts(array(
            
    'order' => 'ASC',
            
    'orderby' => 'menu_order ID',
            
    'id' => $post->ID,
            
    'itemtag' => 'dl',
            
    'icontag' => 'dt',
            
    'captiontag' => 'dd',
            
    'columns' => '3',
            
    'size' => 'thumbnail',
            
    'include' => '',
            
    'exclude' => ''
        
    ), $attr));

        
    $id intval($id);
        if (
    'RAND' == $order$orderby 'none';

        if (!empty(
    $include)) {
            
    $include preg_replace('/[^0-9,]+/'''$include);
            
    $_attachments get_posts(array('include' => $include'post_status' => 'inherit''post_type' => 'attachment''post_mime_type' => 'image''order' => $order'orderby' => $orderby));

            
    $attachments = array();
            foreach (
    $_attachments as $key => $val) {
                
    $attachments[$val->ID] = $_attachments[$key];
            }
        }


        if (empty(
    $attachments)) return '';

        
    $output "<div class="wrapper-gallery">\n";

        foreach (
    $attachments as $id => $attachment) {
            
    $img wp_prepare_attachment_for_js($id);
            if (
    $columns == '3') { $url $img['sizes']['medium']['url']; };
            if (
    $columns == '2') { $url $img['sizes']['large']['url']; };
            if (
    $columns == '1') { $url $img['sizes']['large']['url']; };
            
    $alt $img['title'];
            
    $posturl urlencode(get_permalink());
            
    ob_start();
            
    the_subtitle();
            
    $subtitle ob_get_clean();
            
    $pinalt get_the_title() . ' - ' $subtitle;

            
    $altreplace '$2';
            
    $altneu $url;
            
    $altneu preg_replace("/(.*)\/(.+)(-(.*)x(.*))\.jpg/",$altreplace$altneu);

            if (
    $altneu == $alt){
                
    $alt $pinalt;
            }

            
    $newimageclass "";
            if (
    $columns == '3') {
                if (
    $i <= 2) {
                    
    $newimageclass "firstrowimage lazyload";
                } else {
                    
    $newimageclass "lazyload";
                }
                
    $tmp '<img src="'$url .'" alt="'$alt .'" class="'$newimageclass .'"/>';
                
    $srcset wr2x_picture_rewrite($tmp);    
                
    $addsrc add_attributes($srcset$url);
                
    $script add_data_srcset($addsrc);
                
    $items .= $script;
                
    $columnscount "threecolumns";
            } else if (
    $columns == '2') {
                if (
    $i <= 1) {
                    
    $newimageclass "firstrowimage lazyload";
                } else {
                    
    $newimageclass "lazyload";
                }
                
    $tmp '<img src="'$url .'" alt="'$alt .'" class="'$newimageclass .'"/>';
                
    $srcset wr2x_picture_rewrite($tmp);    
                
    $addsrc add_attributes($srcset$url);
                
    $script add_data_srcset($addsrc);
                
    $items .= $script;
                
    $columnscount "twocolumns";
            } else {
                if (
    $i == 0) {
                    
    $newimageclass "firstrowimage lazyload";
                } else {
                    
    $newimageclass "lazyload";
                }
                
    $tmp '<img src="'$url .'" alt="'$alt .'" class="'$newimageclass .'"/>';
                
    $srcset wr2x_picture_rewrite($tmp);    
                
    $addsrc add_attributes($srcset$url);
                
    $script add_data_srcset($addsrc);
                
    $items .= $script;
                
    $columnscount "onecolumn";
            }
            
    $i++;
        }
        
    $output .= "<div class="{$columnscount}">{$items}</div></div>\n";
        echo 
    $output// WORKS IN ANY CASE
        
    return $output// WORKS ONLY WITH <~60 IMAGES

    }
    add_filter('post_gallery''my_post_gallery'102); 
    und hier die beiden Helper Funktionen:

    PHP-Code:
    function add_data_srcset ($input) {
        
    $match '/(srcset)/';
        
    $replace 'data-$1';
        
    $output preg_replace($match$replace$input);
        return 
    $output;
    }

    function 
    add_attributes($srcset$url){
        
    $match '/(<img)/';
        
    $replace '$1 src=data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== ';
        
    $output preg_replace($match$replace$srcset);
        return 
    $output;


  • #2
    Hast du das selbst geschrieben?
    Wenn ja, was steht im error_log von php?
    Wenn nein, dann wende dich an den Hersteller oder an ein Wordpress Forum.

    Letzteres solltest du immer machen, bevor du mit einer wordpressspezifischen Frage hier her kommst, dort kennt man sich mit der Software aus und PHP können die Entwickler sowieso.

    Kommentar


    • #3
      Vielen Dank protestix!

      Die Custom Gallery ist Teil eines größeren eigenen Themes und da ich das Problem nicht auf Wordpress (kein Error im Log) eingrenzen konnte, aber auch im error_log von php nichts auftaucht, suche ich nun in allen Richtungen.

      Kommentar


      • #4
        Zitat von dride Beitrag anzeigen
        Die Custom Gallery ist Teil eines größeren eigenen Themes und da ich das Problem nicht auf Wordpress (kein Error im Log) eingrenzen konnte, aber auch im error_log von php nichts auftaucht, suche ich nun in allen Richtungen.
        Wie gesagt, die beste Richtung wäre, wenn du dich an den Hersteller wendest. Das Forum hier ist eigentlich nicht für den Support von anderer Software zuständig.

        Wenn der Hersteller nicht mehr greifbar ist, musst du wohl einen Programmierer beauftragen (kann auch hier im Unterforum "Scriptbörse" erfolgen) oder du dir selber das notwendige Grundlagenwissen aneignen. Wenn du dann beim Debugging nicht weiterkommst, kannst du gerne das Forum um Rat bitten (dann aber bitte inkl. aller relevanten Debug-Ausgaben).

        Kommentar


        • #5
          Hey hellbringer!

          Vielen Dank auch für deine Antwort. Das gesamte Theme ist von mir selbst geschrieben und entwickelt worden. Wie schon gesagt, ich bin sonst selten ratlos und wundere mich auch nicht über eine broken Funktion beim Upgrade von php5.6 auf php7.3. Möglicherweise habe ich einfach etwas übersehen und halte daher in alle Richtungen Ausschau. Was für Debug Ausgaben wünscht du dir beispielsweise?

          Besten Dank!

          Kommentar


          • #6
            Vielen Dank auch für deine Antwort. Das gesamte Theme ist von mir selbst geschrieben und entwickelt worden.

            (...)

            echo gibt in jedem Fall die gesamte Galerie brav aus wohingegen return nur etwas liefert, wenn es maximal "um die" 60 Bilder im gesamten Post gibt. Genauer kann ich das leider nicht spezifizieren, weil es sich von Post zu Post unterscheidet (Bildgröße?).
            Du meinst also $output ist unterschiedlich wenn es über return oder über echo weiterverarbeitet wird ?
            was ist den $output (var_dump)?
            Prinzipiell liegt mir ein rendern von htmltemplate und einer datenstrucktur mehr als zusammengebautes html,
            das ist auch wesentlich einfacher zu debugen. ein abschnitt über tempalte engines git es auch in der wissenssammlung.

            https://php-de.github.io/#debugging

            Kommentar


            • #7
              Hey tomBuilder.

              Danke für deine Antwort. Korrekt. $output wird bis circa 60 items über echo und return gleich zurückgegeben. Darüberhinaus nur noch über echo korrekt und über return gar nicht. Ich bin gerade unterwegs und reiche den dump nach. In jedem Fall verändert er sich nicht, wenn mehr items (bis auf die zusätzlichen items natürlich) hinzugefügt werden.

              Kommentar


              • #8
                ob_start(); startet ein Ausgabebuffer, damit machst du dann aber nichts. Ich denke dieser Buffer ist irgendwann voll und daher klappt es mal und mal nicht. Ich sehe an der stelle auch nicht wirklich ein Grund warum ob_start(); verwendet wird.

                Kommentar


                • #9
                  Zitat von Zeichen32 Beitrag anzeigen
                  ob_start(); startet ein Ausgabebuffer, damit machst du dann aber nichts. Ich denke dieser Buffer ist irgendwann voll und daher klappt es mal und mal nicht. Ich sehe an der stelle auch nicht wirklich ein Grund warum ob_start(); verwendet wird.
                  Ein Grund könnte sein, dass the_subtile() eine echo () ausgabe hat, welche abgefangen werden soll - deswegen ja auch das ob_get_clean()
                  https://github.com/benhuson/wp-subti...s/subtitle.php
                  wobai mkir nicht klar ist, wieso keine klasseninstanz bei ist, ruft man die methode auf.

                  Kommentar


                  • #10
                    Zitat von tomBuilder Beitrag anzeigen

                    Ein Grund könnte sein, dass the_subtile() eine echo () ausgabe hat, welche abgefangen werden soll - deswegen ja auch das ob_get_clean()
                    https://github.com/benhuson/wp-subti...s/subtitle.php
                    wobai mkir nicht klar ist, wieso keine klasseninstanz bei ist, ruft man die methode auf.
                    Ah das ob_get_clean habe ich übersehen. Aber würde da die Methode get_subtitle() nicht mehr Sinn machen, die Funktion the_subtitle() ruft auch nur die Methode auf.

                    Kommentar


                    • #11
                      Zitat von Zeichen32 Beitrag anzeigen
                      Aber würde da die Methode get_subtitle() nicht mehr Sinn machen, die Funktion the_subtitle() ruft auch nur die Methode auf.
                      War auch meine erste Idee.
                      aber wie gesagt, .ich hab nur ein methode gefunden, keine function und eine function wird ja wohl aufgerufen..

                      Kommentar


                      • #12
                        Zitat von tomBuilder Beitrag anzeigen

                        War auch meine erste Idee.
                        aber wie gesagt, .ich hab nur ein methode gefunden, keine function und eine function wird ja wohl aufgerufen..
                        Das hier habe ich gefunden in der Datei: https://github.com/benhuson/wp-subti...lugin.php#L153
                        get_the_subtitle()

                        Kommentar


                        • #13
                          hey danke für das #L153, möglicherweise lerne ich das noch mal dauerhaft mit dem Zeilen verlinken auf github.
                          ja, das wird de klasse instanziert, aber auch grausiger Code die methode.

                          oben schreibt TE aber nur:

                          PHP-Code:
                          ob_start();
                          the_subtitle();
                          $subtitle ob_get_clean();
                          $pinalt get_the_title() . ' - ' $subtitle


                          scheint irgendwie ne ältere vor Op version zu sein ^^

                          Kommentar

                          Lädt...
                          X