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.
Um schreiben oder kommentieren zu können, benötigen Sie ein Benutzerkonto.
Sie haben schon ein Benutzerkonto? Melden Sie sich hier an.
Jetzt anmeldenHier können Sie ein neues Benutzerkonto erstellen.
Neues Benutzerkonto erstellenok, 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:
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
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...
Der Fehler ist wohl schon auf dem WP-Bug Radar:
http://comox.textdrive.com/pipermail/wp-t…une/001770.html
- hoffentlich wird er in der nächsten Version gefixt. :-)
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):
// examine a url (supposedly from this blog) and try to
// determine the post ID it represents.
function url_to_postid($url) {
global $wp_rewrite;
// First, check to see if there is a 'p=N' or 'page_id=N' to match against
preg_match('#[?&](p|page_id)=(\d+)#', $url, $values);
$id = intval($values[2]);
if ( $id ) return $id;
// Check to see if we are using rewrite rules
$rewrite = $wp_rewrite->wp_rewrite_rules();
// Not using rewrite rules, and 'p=N' and 'page_id=N' methods failed, so we're out of options
if ( empty($rewrite) )
return 0;
// $url cleanup by Mark Jaquith
// This fixes things like #anchors, ?query=strings, missing 'www.',
// added 'www.', or added 'index.php/' that will mess up our WP_Query
// and return a false negative
// Get rid of the #anchor
$url_split = explode('#', $url);
$url = $url_split[0];
// Get rid of URI ?query=string
$url_split = explode('?', $url);
$url = $url_split[0];
// Add 'www.' if it is absent and should be there
if ( false !== strpos(get_settings('home'), '://www.') && false === strpos($url, '://www.') )
$url = str_replace('://', '://www.', $url);
// Strip 'www.' if it is present and shouldn't be
if ( false === strpos(get_settings('home'), '://www.') )
$url = str_replace('://www.', '://', $url);
// Strip 'index.php/' if we're not using path info permalinks
// this is wrong!!!!
//if ( false === strpos($rewrite, 'index.php/') )
// $rewrite is an array, not a string
// so this should work:
if ( false === strpos(key($rewrite), 'index.php/') )
$url = str_replace('index.php/', '', $url);
if ( false !== strpos($url, get_settings('home')) ) {
// Chop off http://domain.com
$url = str_replace(get_settings('home'), '', $url);
} else {
// Chop off /path/to/blog
$home_path = parse_url(get_settings('home'));
$home_path = $home_path['path'];
$url = str_replace($home_path, '', $url);
}
// Trim leading and lagging slashes
$url = trim($url, '/');
$request = $url;
// Done with cleanup
// Look for matches.
$request_match = $request;
foreach ($rewrite as $match => $query) {
// If the requesting file is the anchor of the match, prepend it
// to the path info.
if ( (! empty($url)) && (strpos($match, $url) === 0) ) {
$request_match = $url . '/' . $request;
}
if ( preg_match("!^$match!", $request_match, $matches) ) {
// Got a match.
// Trim the query of everything up to the '?'.
$query = preg_replace("!^.+\?!", '', $query);
// Substitute the substring matches into the query.
eval("\$query = \"$query\";");
$query = new WP_Query($query);
if ( $query->is_single || $query->is_page )
return $query->post->ID;
else
return 0;
}
}
return 0;
}
Alles anzeigen
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?
// let's find which post is linked to
// FIXME: does url_to_postid() cover all these cases already?
// if so, then let's use it and drop the old code.
$urltest = parse_url($pagelinkedto);
if ($post_ID = url_to_postid($pagelinkedto)) {
$way = 'url_to_postid()';
} 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';
}
Alles anzeigen
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
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):
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):
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:
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 WebrockerDer 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
habe ich jetzt
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
kein String, sondern ein (indiziertes) Array:
Array
(
[index.php/(tags-durchsuchen)/trackback/?$] => index.php?pagename=$matches[1]&tb=1
[index.php/(tags-durchsuchen)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?pagename=$matches[1]&feed=$matches[2]
[index.php/(tags-durchsuchen)/(feed|rdf|rss|rss2|atom)/?$] => index.php?pagename=$matches[1]&feed=$matches[2]
[index.php/(tags-durchsuchen)/page/?([0-9]{1,})/?$] => index.php?pagename=$matches[1]&paged=$matches[2]
[index.php/(tags-durchsuchen)(/[0-9]+)?/?$] => index.php?pagename=$matches[1]&page=$matches[2]
[index.php/tags-durchsuchen/attachment/([^/]+)/?$] => index.php?attachment=$matches[1]
[index.php/tags-durchsuchen/attachment/([^/]+)/trackback/?$] => index.php?attachment=$matches[1]&tb=1
[index.php/tags-durchsuchen/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&feed=$matches[2]
[index.php/tags-durchsuchen/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&feed=$matches[2]
[index.php/(kontakt)/trackback/?$] => index.php?pagename=$matches[1]&tb=1
[index.php/(kontakt)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?pagename=$matches[1]&feed=$matches[2]
[index.php/(kontakt)/(feed|rdf|rss|rss2|atom)/?$] => index.php?pagename=$matches[1]&feed=$matches[2]
[index.php/(kontakt)/page/?([0-9]{1,})/?$] => index.php?pagename=$matches[1]&paged=$matches[2]
[index.php/(kontakt)(/[0-9]+)?/?$] => index.php?pagename=$matches[1]&page=$matches[2]
[index.php/kontakt/attachment/([^/]+)/?$] => index.php?attachment=$matches[1]
[index.php/kontakt/attachment/([^/]+)/trackback/?$] => index.php?attachment=$matches[1]&tb=1
[index.php/kontakt/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&feed=$matches[2]
[index.php/kontakt/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&feed=$matches[2]
[index.php/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?&feed=$matches[1]
[index.php/(feed|rdf|rss|rss2|atom)/?$] => index.php?&feed=$matches[1]
[index.php/page/?([0-9]{1,})/?$] => index.php?&paged=$matches[1]
[index.php/comments/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?&feed=$matches[1]&withcomments=1
[index.php/comments/(feed|rdf|rss|rss2|atom)/?$] => index.php?&feed=$matches[1]&withcomments=1
[index.php/comments/page/?([0-9]{1,})/?$] => index.php?&paged=$matches[1]
[index.php/search/(.+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?s=$matches[1]&feed=$matches[2]
[index.php/search/(.+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?s=$matches[1]&feed=$matches[2]
[index.php/search/(.+)/page/?([0-9]{1,})/?$] => index.php?s=$matches[1]&paged=$matches[2]
[index.php/search/(.+)/?$] => index.php?s=$matches[1]
[index.php/category/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?category_name=$matches[1]&feed=$matches[2]
[index.php/category/(.+?)/(feed|rdf|rss|rss2|atom)/?$] => index.php?category_name=$matches[1]&feed=$matches[2]
[index.php/category/(.+?)/page/?([0-9]{1,})/?$] => index.php?category_name=$matches[1]&paged=$matches[2]
[index.php/category/(.+?)/?$] => index.php?category_name=$matches[1]
[index.php/author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?author_name=$matches[1]&feed=$matches[2]
[index.php/author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?author_name=$matches[1]&feed=$matches[2]
[index.php/author/([^/]+)/page/?([0-9]{1,})/?$] => index.php?author_name=$matches[1]&paged=$matches[2]
[index.php/author/([^/]+)/?$] => index.php?author_name=$matches[1]
[index.php/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]
[index.php/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]
[index.php/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/page/?([0-9]{1,})/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&paged=$matches[4]
[index.php/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]
[index.php/([0-9]{4})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]
[index.php/([0-9]{4})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]
[index.php/([0-9]{4})/([0-9]{1,2})/page/?([0-9]{1,})/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&paged=$matches[3]
[index.php/([0-9]{4})/([0-9]{1,2})/?$] => index.php?year=$matches[1]&monthnum=$matches[2]
[index.php/([0-9]{4})/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?year=$matches[1]&feed=$matches[2]
[index.php/([0-9]{4})/(feed|rdf|rss|rss2|atom)/?$] => index.php?year=$matches[1]&feed=$matches[2]
[index.php/([0-9]{4})/page/?([0-9]{1,})/?$] => index.php?year=$matches[1]&paged=$matches[2]
[index.php/([0-9]{4})/?$] => index.php?year=$matches[1]
[index.php/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/trackback/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&tb=1
[index.php/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&feed=$matches[5]
[index.php/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&feed=$matches[5]
[index.php/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/page/?([0-9]{1,})/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&paged=$matches[5]
[index.php/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)(/[0-9]+)?/?$] => index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&page=$matches[5]
[index.php/[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/?$] => index.php?attachment=$matches[1]
[index.php/[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/trackback/?$] => index.php?attachment=$matches[1]&tb=1
[index.php/[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&feed=$matches[2]
[index.php/[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&feed=$matches[2]
[index.php/[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/?$] => index.php?attachment=$matches[1]
[index.php/[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/trackback/?$] => index.php?attachment=$matches[1]&tb=1
[index.php/[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&feed=$matches[2]
[index.php/[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&feed=$matches[2]
[index.php/tag/(.*)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?tag=$matches[1]&feed=$matches[2]
[index.php/tag/(.*)/(feed|rdf|rss|rss2|atom)/?$] => index.php?tag=$matches[1]&feed=$matches[2]
[index.php/tag/(.*)/page/?([0-9]{1,})/?$] => index.php?tag=$matches[1]&paged=$matches[2]
[index.php/tag/(.*)/?$] => index.php?tag=$matches[1]
)
Alles anzeigen
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
// 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:
// examine a url (supposedly from this blog) and try to
// determine the post ID it represents.
function url_to_postid($url) {
global $wp_rewrite;
// First, check to see if there is a 'p=N' or 'page_id=N' to match against
preg_match('#[?&](p|page_id)=(\d+)#', $url, $values);
$id = intval($values[2]);
if ( $id ) return $id;
// Check to see if we are using rewrite rules
$rewrite = $wp_rewrite->wp_rewrite_rules();
// Not using rewrite rules, and 'p=N' and 'page_id=N' methods failed, so we're out of options
if ( empty($rewrite) )
return 0;
// $url cleanup by Mark Jaquith
// This fixes things like #anchors, ?query=strings, missing 'www.',
// added 'www.', or added 'index.php/' that will mess up our WP_Query
// and return a false negative
// Get rid of the #anchor
$url_split = explode('#', $url);
$url = $url_split[0];
// Get rid of URI ?query=string
$url_split = explode('?', $url);
$url = $url_split[0];
// Add 'www.' if it is absent and should be there
if ( false !== strpos(get_settings('home'), '://www.') && false === strpos($url, '://www.') )
$url = str_replace('://', '://www.', $url);
// Strip 'www.' if it is present and shouldn't be
if ( false === strpos(get_settings('home'), '://www.') )
$url = str_replace('://www.', '://', $url);
// Strip 'index.php/' if we're not using path info permalinks
if ( false === strpos($rewrite, 'index.php/') )
$url = str_replace('index.php/', '', $url);
if ( false !== strpos($url, get_settings('home')) ) {
// Chop off http://domain.com
$url = str_replace(get_settings('home'), '', $url);
} else {
// Chop off /path/to/blog
$home_path = parse_url(get_settings('home'));
$home_path = $home_path['path'];
$url = str_replace($home_path, '', $url);
}
// Trim leading and lagging slashes
$url = trim($url, '/');
$request = $url;
// Done with cleanup
// Look for matches.
$request_match = $request;
foreach ($rewrite as $match => $query) {
// If the requesting file is the anchor of the match, prepend it
// to the path info.
if ( (! empty($url)) && (strpos($match, $url) === 0) ) {
$request_match = $url . '/' . $request;
}
if ( preg_match("!^$match!", $request_match, $matches) ) {
// Got a match.
// Trim the query of everything up to the '?'.
$query = preg_replace("!^.+\?!", '', $query);
// Substitute the substring matches into the query.
eval("\$query = \"$query\";");
$query = new WP_Query($query);
if ( $query->is_single || $query->is_page )
return $query->post->ID;
else
return 0;
}
}
return 0;
}
Alles anzeigen
Die andere wohnt in der xmlrpc.php selbst, Zeile 1083ff:
/* PingBack functions
* specs on www.hixie.ch/specs/pingback/pingback
*/
/* pingback.ping gets a pingback and registers it */
function pingback_ping($args) {
global $wpdb, $wp_version;
$this->escape($args);
$pagelinkedfrom = $args[0];
$pagelinkedto = $args[1];
$title = '';
$pagelinkedfrom = str_replace('&', '&', $pagelinkedfrom);
$pagelinkedto = preg_replace('#&([^amp\;])#is', '&$1', $pagelinkedto);
$error_code = -1;
// Check if the page linked to is in our site
$pos1 = strpos($pagelinkedto, str_replace(array('http://www.','http://','https://www.','https://'), '', get_settings('home')));
if( !$pos1 )
return new IXR_Error(0, 'Is there no link to us?');
// let's find which post is linked to
// FIXME: does url_to_postid() cover all these cases already?
// if so, then let's use it and drop the old code.
$urltest = parse_url($pagelinkedto);
if ($post_ID = url_to_postid($pagelinkedto)) {
$way = 'url_to_postid()';
} 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';
} elseif (preg_match('#p=[0-9]{1,}#', $urltest['query'], $match)) {
// the querystring defines the post_ID (?p=XXXX)
$blah = explode('=', $match[0]);
$post_ID = $blah[1];
$way = 'from the querystring';
} elseif (isset($urltest['fragment'])) {
// an #anchor is there, it's either...
if (intval($urltest['fragment'])) {
// ...an integer #XXXX (simpliest case)
$post_ID = $urltest['fragment'];
$way = 'from the fragment (numeric)';
} elseif (preg_match('/post-[0-9]+/',$urltest['fragment'])) {
// ...a post id in the form 'post-###'
$post_ID = preg_replace('/[^0-9]+/', '', $urltest['fragment']);
$way = 'from the fragment (post-###)';
} elseif (is_string($urltest['fragment'])) {
// ...or a string #title, a little more complicated
$title = preg_replace('/[^a-z0-9]/i', '.', $urltest['fragment']);
$sql = "SELECT ID FROM $wpdb->posts WHERE post_title RLIKE '$title'";
if (! ($post_ID = $wpdb->get_var($sql)) ) {
// returning unknown error '0' is better than die()ing
return new IXR_Error(0, '');
}
$way = 'from the fragment (title)';
}
} else {
// TODO: Attempt to extract a post ID from the given URL
return new IXR_Error(33, 'The specified target URI cannot be used as a target. It either doesn\'t exist, or it is not a pingback-enabled resource.');
}
Alles anzeigen
Wenn ich das richtig interpretiere, müsste eine url wie
Im unteren Bereich der xmlrpc Funktion landen, dort, wo die DB-Query mit dem "RLIKE $title" steht.
Aber irgendwas geht da schief.
Ja... profi to the rescue. :smile:
Ich komme auch nicht mehr weiter. Ich habe in der xmlrpc.php die Bedingung mit dem '#p/...' mal geändert auf '#/p/...', danach war im Log nichts mehr mit output:... zu sehen :???:
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:
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):
} 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
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 Monikawas 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:
Mit diesen Permalinks klappen die Pingbacks. Stellt man die Permalinks auf "Benutzerdefiniert" und verwendet
dann gehen die Pingbacks nicht.
Mööp.
Das wäre ja auch zu einfach gewesen. Umstellen auf
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
)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
Probleme macht.
Alle anderen Angaben zu Feed oder Trackback werden nämlich in der Form
oder
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
wahrscheinlich arbeitet dein design mit css "position: absolute;"
du musst also die styles für das kommentarfeld auch entsprechend stylen, dass die left- und top werte es zum rest passend positionieren.
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