Support » Plugins » Permalink wird zum href hinzugefügt

  • Gelöst soeintyp

    (@soeintyp)


    Servus,

    ich bin grade dabei für eine Webseite eine FTP-Alternative zu schreiben. Ein bestimmter Ordner wird von dem Plugin via HTML aufgelistet und kann mit einem Klick heruntergeladen werden.

    Der Output sieht wie folgt aus:
    <a href="www.DOMAIN.com/files/Information zur Lagerung unserer Produkte.pdf" download="">Information zur Lagerung unserer Produkte.pdf</a>

    Funktioniert so weit so gut.
    Nun ist aber beim Hovern über den Link nicht die URL wie sie im href steht, sondern sieht wie folgt aus:
    `https://www.DOMAIN.com/alg-bestaetigungen/www.DOMAIN.com/files/Information%20zur%20Lagerung%20unserer%20Produkte.pdf

    Der Permalink wird dem href-attr einfach hinzugefügt.
    Ich konnte leider nichts in der Dokumentation oder in anderen Foren dazu finden.

    Ich bin auf die Gurus gespannt und danke im Voraus!

Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)
  • Die „Gurus“ können auch nur Code lesen und dazu was sagen, während die hellseherischen Fähigkeiten häufig überschätzt werden.

    Gibt’s zu deinem Plugin ein Git-Repository? Code auf Pastebin hochgeladen?

    Aber natürlich. Wie gesagt es funktioniert ja soweit, nur bei der Einbindung in WP wird der Permalink dem href hinzugefügt.

    
    $start_ftp_alternative = new FtpAlternative();
    
    /**
     * Class FtpAlternative
     */
    class FtpAlternative{
        public function __construct() {
            register_activation_hook( __FILE__, array( $this, 'ftpAlternative_activate' ) );
            $this->make_shortcode();
        }
    
        /**
         * Display filepath
         *
         * @param $path
         */
        public function getFileDownloadPath() {
    		$folder = '/files/';
            $path = ABSPATH . $folder;
    		$download = $_SERVER["HTTP_HOST"] . $folder;
            if ($handle = opendir($path)) {
                while (false !== ($entry = readdir($handle))) {
                    if ($entry != "." && $entry != "..") {
                        echo "<a href='$download$entry' download=''>$entry</a><br>";
                    }
                }
                closedir($handle);
            }
        }
    
        /**
         * Create shortcodes
         * [getFileDownloadPath]
         */
        function make_shortcode() {
            add_shortcode('getFileDownloadPath', array($this,'getFileDownloadPath'));
        }
    }

    So auf die Schnelle fällt mir nur auf, dass du im Shortcode eine Funktion verwendest, die mit echo Inhalt ausgibt, statt ihn mit return zurückzugeben. Die Zeile $download = $_SERVER["HTTP_HOST"] . $folder; hat mich auch stutzig gemacht, da hätte ich eher $download = get_site_url() . $folder; verwendet. Aber ansonsten ist mir das immer noch zu wenig Information, um es zu beurteilen.

    1. ich gebe mehrere Werte aus, deshalb echo. Mit return wird die function beendet.
    2. get_site_url ist an WP gebunden, meine Variante nicht.
    3. Ich fang nochmal von vorne an.

    Ich erstelle einen Shortcode um auf eine bestimmten Seite meine PHP Funktion zu laden. In dieser PHP Funktion wird der Inhalt eines Ordners aufgelistet ausgegeben. Nun soll wenn man auf eins der Elemente klickt zum download weitergeleitet werden.

    Im HTML wird folgenes ausgegeben:
    <a href="www.DOMAIN.com/files/Information zur Lagerung unserer Produkte.pdf" download="">Information zur Lagerung unserer Produkte.pdf</a>

    Absolut korrekt und einwandfrei. Jetzt das Problem:
    Beim Hovern auf das A-Tag wird mir der Permalink noch zusätzlich vor meinem Link angezeigt.

    Ich gehe also in die DevTools und gucke mir den Code an:
    <a href="www.DOMAIN.com/files/Information zur Lagerung unserer Produkte.pdf" download="">Information zur Lagerung unserer Produkte.pdf</a>

    Ich schließe die DevTools und hovere über den Link sieht es so aus:
    Beispiellink

    Der Code funktioniert ohne WordPress einwandfrei, es scheint mir so als würde WordPress vor jedes Href den Permalink knallen..

    Shortcodes sind Filteranweisungen für einen Post, der anschließend ausgegeben wird. Verwendest du in der Shortcode-Funktion echo, wird an einer falschen Stelle etwas ausgegeben, was nicht Sinn des Shortcodes ist.

    get_site_url() ist eine WordPress-Funktion. So wie add_shortcode() auch.

    Ich bezweifele, dass <a href="www.DOMAIN.com/ … ohne Angabe eines Schemas valides HTML ist.

    Ansonsten würde ich mir gerne die Website dazu ansehen. Vielleicht hast du eine JavaScript-Funktion, die das Verhalten des Buttons ändert. Oder es spielt irgendein Plugin eine Rolle, das Theme … In der Gleichung sind zu viele Unbekannte, um sie zu lösen.

    Das fehlende Schema ist das Problem.

    Probier mal

    return "<a href='https://$download$entry' download=''>$entry</a><br>";

    Ist jetzt geändert:

    public function getFileDownloadPath() {
    		$folder = '/files/';
            $path = ABSPATH . $folder;
    		$download = $_SERVER["HTTP_HOST"] . $folder;
    		$return = null;
            if ($handle = opendir($path)) {
                while (false !== ($entry = readdir($handle))) {
                    if ($entry != "." && $entry != "..") {
    					$return .= "<a href='https://$download$entry' download=''>$entry</a><br>";
                    }
                }
    			return $return;
                closedir($handle);
            }
        }

    Und ja, das ist natürlich kein valides HTML. Aber ist ja auch noch nicht produktiv. 😉
    Mit return und angabe von https hat es jetzt funktioniert.

    Ich kann es mir zwar nicht erklären, aber WordPress ist so oder so nicht meine Welt.

    Vielen Dank für die kompetente Hilfe!

    • Diese Antwort wurde geändert vor 4 Monaten, 3 Wochen von soeintyp.

    Ich vermute, dass ein Anker ohne Schema vom Browser als „auf der Seite“ interpretiert wird und deshalb die URL der angezeigten Seite vorweggestellt wird.

Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)