I går efterfrågade jag en plug-in till WordPress som, baserat på din Brightkite-position, märker dina bloggposter med en geografisk position. Och nu verkar det som att jag har en lösning på gång.
Det jag gjort är att ladda hem, installera och aktivera en plug-in som heter WP-Brightkite.
Jag ändrade om funktionen bkite_current_location() till nedanstående:
function bkite_current_location() {
global $current_user;
if( !$brightkite = get_usermeta( $current_user->ID, 'brightkite' ) )
return false;
include_once( ABSPATH . '/wp-includes/rss.php');
$georss = @fetch_rss('http://brightkite.com/people/' . $brightkite . '/objects.rss?limit=1&filters=checkins');
if ( isset($georss->items) && 0 < count($georss->items) ) {
foreach( $georss->items as $checkin ) {
$lat = (string) $checkin['geo']['lat'];
$long = (string) $checkin['geo']['long'];
$placemark = (string) $checkin['bk']['placename'];
}
}
return $placemark;
}
Sen placerade jag bara ut den i postens template, jag valde att placera den strax under rubriken.
Det enda som kvarstår är att få in positionen som en del av postens innehåll och inte en fristående del. Alltså att lagra positionen vid det tillfälle man publicerar posten. För som det är just nu misstänker jag att samtliga poster uppdateras med samma geografiska position. Det känns i alla fall som att jag kommit en bit på vägen. Fortsättning följer.
Uppdatering: Fullständig lösning hittar du i denna post.
Hej Niklas!
Det var en bra början på något användbart. WordPress egna API innehåller en hel del hooks, vilket i praktiken innebär att du kan binda en funktion till en viss händelse. Som t ex. varje gång en post publiceras eller redigeras. Geodatan föreslår jag att du sparar ned medhjälp av custom fields.
Här är ett exempel på hur det kan se ut. Obs jag har inte prövat denna kod men det ger dig en knuff i rätt riktning iaf: http://pastie.org/557876
Jag tycker den redan verkar göra det du vill göra…
Funktionen save_bkite_loc() körs när inlägg sparas, och den kör funktionen bkite_lat_long() som är samma som du skrivit in ovan. Denna information sparas med inlägget.
När inlägg visas så läses informationen från postens metafält och visas mha get_bkite_loc()
Fast jag har inte läst koden så noga.
bkite_lat_long() skriver inte ut senaste placemarkern, det var därför jag fick lov att mixtra lite med den. Och då döpte jag om den. Men du har ju rätt angående save_bkite_loc() vad det verkar som iaf.
Jag vet inte om det är värmen eller vad det är, men hur ska jag göra för att slippa använda Custom Fields? Jag har ju lagt in <? bkite_current_location() ?> i templaten. Sen känner jag mig helt vilsen…
Jag vet inte riktigt om jag hänger med, geodatan? Jag har placemarkern via <? bkite_current_location() ?> i huvudet på varje post. Och sen finns det ett custom field som heter geoloc, som är för denna plug-in. Men vad ska då värdet vara?
Förlåt om jag ställer helt idiotiska frågor, men jag känner att jag inte riktigt förstår vad du menar :)
Slängde ihop ett snabbt exempel (inte prövat själv). Funktionen bkite_current_location() hämtar ens aktuella position som tidigare. Funktionen bkite_save_current_location() utförs varje gång en post publiceras och hämtar ens aktuella position medhjälp av bkite_current_location(). Geodatan sparas ned som ett custom field tillhörande posten.
Funktionen bkite_get_saved_location() ska du kunna använda innanför postloopen för att hämta den sparade positionen tillhörande posten.
Oops glömde länken: http://pastie.org/557962
Tack Anton! Jag får det dock inte att funka i alla fall. Just nu använder jag dina tre funktioner i kombination med de redan befintliga funktionerna bkite_authorprofile(), bkite_updatemeta(), bkite_post_loc(), bkite_geotag_feed_ns(), bkite_meta_tag() och bkite_meta_box().
Allt verkar funka som det ska, men positionen uppdateras inte. Det kanske har med Brightkite att göra iofs, och inte dina funktioner. Har du några förslag på hur man kan göra för att snabba upp hämtningen av feedet? För just nu känns det som att det är det som är problemet.
Slängde ihop ett snabbt exempel (inte prövat själv). Funktionen bkite_current_location() hämtar ens aktuella position som tidigare. Funktionen bkite_save_current_location() utförs varje gång en post publiceras och hämtar ens aktuella position medhjälp av bkite_current_location(). Geodatan sparas ned som ett custom field tillhörande posten.
Funktionen bkite_get_saved_location() ska du kunna använda innanför postloopen för att hämta den sparade positionen tillhörande posten.
Oops glömde länken: http://pastie.org/557962
Tack Anton! Just nu använder jag dina tre funktioner i kombination med de redan befintliga funktionerna bkite_authorprofile(), bkite_updatemeta(), bkite_post_loc(), bkite_geotag_feed_ns(), bkite_meta_tag() och bkite_meta_box().
Allt verkar funka som det ska, men positionen uppdateras inte. Det kanske har med Brightkite att göra iofs, och inte dina funktioner. Har du några förslag på hur man kan göra för att snabba upp hämtningen av feedet? För just nu känns det som att det är det som är problemet.