Beiträge von Webrocker

    ok, dann gehen mir jetzt die Ideen aus. :cry:
    ich sehe nur diese unterschiede:
    - mein blog ist in einem unterverzeichnis
    - meine erste rewrite-rule sieht anders aus als deine (nix mit print=1)

    Eigentlich sollte es bei Dir auch funktionieren.

    Nee, eine rewrite.php habe ich auch nicht. Alles in der functions.php, so wie bei Dir.
    Die letzte Idee, die ich habe:
    Schreibe mal das hier in die index.php Deines Themes nach dem header-include:

    PHP
    echo "<!--\n<pre>\n";
    print_r( $wp_rewrite->wp_rewrite_rules() );
    echo "</pre>\n//-->\n";


    und lade Deinen Blog neu. Im Quelltext solltest Du nun eine Auflistung des rewrite-rules Arrays sehen. Schau mal, ob da in der ersten Zeile was von

    Code
    [index.php/ ........] => index.php?......

    steht.

    hm... sehr merkwürdig.
    was steht denn bei dir im backend unter allgemeinen optionen bei
    "WordPress-Adresse (URL)" und "Blog-Adresse (URL)" ?
    Der einzige Unterschied zwischen unseren Blogs ist, dass meines in einem UNterverzeichnis lebt. Ich habe keine Ahnung, wieso das auf die Permalinks/Pingbacks auswirken sollte, aber man weiss ja nie...

    hm, ok... alles wie bei mir.
    also greift bei dir die url_to_postid() nicht richtig, und dann geht es in der xmlrpc.php weiter und da wird dieses #p/ tralala gecheckt.
    ich poste hier mal die komplette url_to_postid() Funktion, wie sie bei mir jetzt in der functions.php steht. Check mal, ob es da irgendeinen Unterschied zu Deiner Version gibt. (functions.php Zeile 178 bis 265):


    Ich habe die original Zeile auskommentiert und noch drei Kommentarzeilen reingeschrieben. sollte aber an der funktion nix ändern :smile:

    Zitat von Chris_

    Liest Du da irgendwas raus?


    Ja. Das "found: from the path" ist anders als bei mir, dort steht "found: url_to_postid()", das ist die geänderte Function aus der functions.php.

    Welche Wordpress-Version läuft bei Dir? Was steht in Deiner xmlrpc.php so in Zeile 1118-1130?

    gruss
    Tom

    Zitat von Chris_

    Es ist zum Mäuse melken... Bei mir funktioniert es weder mit Änderung der Coezeile noch mit Auskommentieren beider Zeilen...

    Naja, kann man wohl nichts machen...

    Chris


    Hi Chris,
    wenn Du noch Nerv hast, ändere mal in der xmlrpc.php in der Zeile 42

    PHP
    $xmlrpc_logging = 0;

    Die 0 zu einer 1.

    Wenn dann ein Pingback zu Dir erfolgt, wird eine Logdatei "xmlrpc.log" in dem Verzeichnis *über* Deinem Blogverzeichnis erzeugt.

    Bei mir stand bei einem erfolgreichen Pingback "input: blablabla" und "output: blablabla" drin, wenn kein Pinback durchkam, stand dort nur "input: blablablabla".

    Erfolgreicher Pingback (mit standard Permalink):

    Code
    2006-06-18 12:59:32  Input: <?xml version="1.0"?>
    <methodCall>
    <methodName>pingback.ping</methodName>
    <params>
    <param><value><string>http://www.fcbui.net/fcblog/?p=91</string></value></param>
    <param><value><string>http://www.webrocker.de/blog/index.php?p=142</string></value></param>
    </params></methodCall>
    
    
    2006-06-18 12:59:32  Output: (PB) URI='http://www.webrocker.de/blog/index.php?p=142' ID='142' Found='url_to_postid()'

    Erfolgreicher Pingback (mit index.php/ Permalink):

    Code
    2006-06-18 19:12:08  Input: <?xml version="1.0"?>
    <methodCall>
    <methodName>pingback.ping</methodName>
    <params>
    <param><value><string>http://www.fcbui.net/fcblog/?p=97</string></value></param>
    <param><value><string>http://www.webrocker.de/blog/index.php/2006/06/18/pingback-trackback-scheissdreck/</string></value></param>
    </params></methodCall>
    
    
    2006-06-18 19:12:08  Output: (PB) URI='http://www.webrocker.de/blog/index.php/2006/06/18/pingback-trackback-scheissdreck/' ID='142' Found='url_to_postid()'

    Nicht erfolgreicher Pingback:

    Code
    2006-06-18 15:10:28  Input: <?xml version="1.0"?>
    <methodCall>
    <methodName>pingback.ping</methodName>
    <params>
    <param><value><string>http://www.fcbui.net/fcblog/?p=95</string></value></param>
    <param><value><string>http://www.webrocker.de/blog/index.php/2006/06/18/pingback-trackback-scheissdreck/</string></value></param>
    </params></methodCall>
    Zitat von Webrocker

    Der check in der if-Abfrage müsste also auf die keys in diesem Array gehen, evtl genügt ein check auf den ersten Key, ob dieser "index.php/" enthält.


    So, muss man denn alles selbst machen.... :D.
    Anstelle von

    PHP
    if ( false === strpos($rewrite, 'index.php/') )

    habe ich jetzt

    PHP
    if ( false === strpos(key($rewrite), 'index.php/') )

    stehen, und Pingbacks kommen an. Damit wird geprüft, ob im ersten Key des rewrite-rules Arrays "index.php/" vorkommt, wenn nicht, wird "index.php/" wie zuvor entfernt. Wenn man es ganz genau nimmt, müsste man das rewrite-rules Array durchnudeln, und schauen, ob in irgendeinem Key das "index.php/" steht. Da aber wie oben zu sehen ist, in jeder Zeile des Arrays das "index.php/" vorkommt, genügt es, nur in der ersten zu schauen. Denke ich mal.

    Zitat von Chris_

    oder kann man sie auskommentieren?


    Ich habe es bei mir jetzt mal auskommentiert. Mal schauen, ob alles so funktioniert, wie bisher.

    Vielleicht hat jemand von PHP mehr Ahnung als ich und kann die if-Abfrage richtig machen. Die Idee dahinter ist ja richtig, nur ist das

    PHP
    $rewrite

    kein String, sondern ein (indiziertes) Array:


    Der check in der if-Abfrage müsste also auf die keys in diesem Array gehen, evtl genügt ein check auf den ersten Key, ob dieser "index.php/" enthält.
    Also, bitte jemand mit php-Ahnung hier einsteigen.

    Falls wir hier einen echten Bug gefunden haben, wie erfahren die WP-Entwickler davon?

    Gruss
    Tom

    Ok, ich habe den Fehler gefunden, bzw eingekreist.

    Der Abschnitt mit "index.php/" in der functions.php, Zeile 216

    PHP
    // Strip 'index.php/' if we're not using path info permalinks
        if ( false === strpos($rewrite, 'index.php/') )
           $url = str_replace('index.php/', '', $url);


    ist der Bösewicht. Wenn ich die beiden Zeilen auskommentiere, klappt es mit den Pingbacks.

    Anscheinend ist die if-Abfrage fehlerhaft, sodass *immer* das index.php aus dem zu checkenden url-String entfernt wird.

    Um den Profis die Arbeit etwas zu erleichtern...
    es gibt zwei Funktionen, die (anscheinend) damit zu tun haben.

    Die eine lebt in /wp-includes/functions.php Zeile 178ff:


    Die andere wohnt in der xmlrpc.php selbst, Zeile 1083ff:


    Wenn ich das richtig interpretiere, müsste eine url wie

    Code
    http://www.domain.tld/wp/index.php/2006/03/10/mein-toller-titel/

    Im unteren Bereich der xmlrpc Funktion landen, dort, wo die DB-Query mit dem "RLIKE $title" steht.
    Aber irgendwas geht da schief.

    So und weiter gehts mit dem Selbstgespräch.

    Ich habe in der xmlrpc.php mal das Logging aktiviert, und von einem befreundeten Blog einen Ping losgeschickt auf meinen Eintrag.
    Im Log steht nun das hier:

    Code
    2006-06-18 12:06:52  Input: <?xml version="1.0"?>
    <methodCall>
    <methodName>pingback.ping</methodName>
    <params>
    <param><value><string>http://www.fcbui.net/fcblog/?p=88</string></value></param>
    <param><value><string>http://www.webrocker.de/blog/index.php/2006/06/18/pingback-trackback-scheissdreck/</string></value></param>
    </params></methodCall>
    
    
    2006-06-18 12:06:52  Output: (PB) URI='http://www.webrocker.de/blog/index.php/2006/06/18/pingback-trackback-scheissdreck/' ID='2006' Found='from the path'

    Der Ping kommt also richtig an, wird aber innerhalb der xmlrpc.php falsch "zerpflückt". Der Eintrag, unter dem dieser Ping erscheinen würde, wäre der mit der ID 2006 - offenbar "findet" die xmlrpc.php die Jahreszahl im Permalink und interpretiert diese als Beitrags-ID.
    :-(

    Irgendwas läuft an dieser Stelle hier schief (zeile 1124ff in der xmlrpc.php):

    PHP
    } elseif (preg_match('#p/[0-9]{1,}#', $urltest['path'], $match)) {
                // the path defines the post_ID (archives/p/XXXX)
                $blah = explode('/', $match[0]);
                $post_ID = $blah[1];
                $way = 'from the path';

    Ich bin leider nicht so fit in RegEx Zeug... aber kann es sein, dass

    Code
    '#p/[0-9]{1,}#'

    auch auf 'index.php/2006/...' greift? Weil das letzte p von .php gefolgt von einem / und dann einer Ziffer genau der obigen Bedingung entsprechen würde.

    Zitat von Monika

    was verstehst Du unter:
    permalinks auf *standard* setzen, dann funktioniert es

    Hi Monika,
    im Backend unter Optionen -> Permalinks gibt es mehrere Select-Buttons, einer davon lautet "standard" und der dazugehörige Permalink sieht dann so aus:

    Code
    http://www.domainname.tld/wordpressverzeichnis/?p=123


    Mit diesen Permalinks klappen die Pingbacks. Stellt man die Permalinks auf "Benutzerdefiniert" und verwendet

    Code
    /index.php/%year%/%monthnum%/%day%/%postname%/

    dann gehen die Pingbacks nicht.

    Mööp.
    Das wäre ja auch zu einfach gewesen. Umstellen auf

    Code
    /index.php/xmlrpc/

    in der link rel="pingback" bringt garnichts.
    Also denke ich ist das Problem die xmlrpc.php selbst. Genauso, wie die index.php anscheinend in der Lage ist, anhand der Permalinkstruktur intern den richtigen Beitrag zu finden, müsste die xmlrpc.php das auch tun, damit der Pingback in den Kommentaren des gepingten Artikels erscheint. Anscheinend stolpert sie aber, da sie (achtung, reine Mutmaßung) entweder eine "echte" Rewrite-URL erwartet in der Form blogadresse/irgendwas/ oder eine index.php mit query-string (mit fragezeichen und so; ?p=123).
    Der "Zwitter" /index.php/archiv/tollertitel/ wird offenbar nicht berücksichtigt.

    gruss
    Tom

    Ich habe gestern noch ein bisschen rumrecherchiert.
    Diese "Notlösung" für die Permalinks ist durchaus nicht unüblich, es wird auf der Wordpress Codex Seite sogar ausdrücklich darauf hingewiesen, dass es eine Methode ist, "nice" URLs zu erzeugen, ohne mit mod_rewrite und der .htaccess zu arbeiten (http://codex.wordpress.org/Using_Permalinks). Wenn also ein Dateiname am Anfang der Permalinkstruktur angegeben wird (in unserem Fall also die index.php), dann versucht Wordpress, die Struktur die hintennachfolgt, an diese Datei zu übergeben und durch irgendwelchen Voodoo werden die gewünschten Seiten angezeigt. Aus irgendeinem Grund funktionieren Trachbacks, wahrscheinlich, weil hier explizit eine andere Datei "gerufen" wird

    Code
    /index.php/archiv/tollertitel/trackback/

    )Also ohne es technisch oder gar programmiermässig erklären zu können, ich habe den Verdacht, dass die Angabe des link rel="pingback" bzw die dort angegebe Datei

    Code
    /xmlrpc.php

    Probleme macht.
    Alle anderen Angaben zu Feed oder Trackback werden nämlich in der Form

    Code
    /index.php/feed/

    oder

    Code
    /index.php/trackback/

    gemacht.
    Ich werde bei mir jetzt einfach mal die rel=pingback entsprechend umstellen und versuchen, von einem anderen Blog einen Pingback auszulösen.
    Bis gleich,
    gruss
    Tom

    Hi Chris
    ich habe genau das gleiche Problem und wollte gerade hier posten.
    ich muss auch die "Notlösung" mit der index.php/archiv/hastenichgesehen/... Permalinkstruktur benutzen, da mod_rewrite auf meinem Webspace nicht aktiviert ist.
    Genau wie bei Dir gehen Trackbacks, aber keine Pingbacks.
    Ich möchte jetzt ungern wieder umsteigen auf die ?p=1234 Syntax, zumal ich nicht verstehe, wieso Trackbacks in den Kommentaren erscheinen, aber Pingbacks nicht.
    Gruss
    Tom

    nee ich glaube nicht, dass FF das Problem ist...
    kuckmal ob du in der config oder im backend bei den optionen den namen des blog verzeichnisses evtl falsch eingegeben hast.
    auf meiner seite heisst das wp-verzeichnis auch "blog", aber ich habe keine Probleme mit dem Firefox. kuck mal unter "optionen" im backend, dort bei "allgemeine einstellungen" dort dann bei "Wordpress Adresse (url)" und "Blog Adresse (url)" - hier sollte der komplette Pfad mit http:// zu deinem WP Verzeichnis stehen. also "http://www.deinedomain.de/blog"

    gruss
    Tom

    hi kein grund zur panik.
    wie hast du denn das verzeichnis benannt, in dem dein wordpress liegt?
    ich tippe mal "blog" oder so.
    tippe mal in einem neuen browserfenster in der adressleiste nur den namen deines wp-verzeichnisses ein ohne http und www einfach nur das wort; ich wette, Du landest bei wikipedia oder auf einer anderen seite.
    irgendwas stimmt in deiner install nicht, sodass der redirect nach dem login nicht auf eine richtige url geht, sondern eben nur auf deinen verzeichnisnamen. das da irgendwelche seiten gerufen werden, liegt dann daran wie Firefox die eingabe in der adressleiste behandelt.

    gruss
    Tom