Sehr cool, das Plugin "Full Text Feeds" scheint zu funktionieren.
Vielen Dank!
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 erstellenSehr cool, das Plugin "Full Text Feeds" scheint zu funktionieren.
Vielen Dank!
Vielleicht hilft dir das: https://core.trac.wordpress.org/ticket/10984#comment:19
Oh, das sieht gut aus. Die '.diff's sind auch interessant. Sieht so aus, als würde sich the_content() der $pages-Variablen bedienen. Ich weiß zwar nicht, wo die herkommt, aber sie scheint die Anzahl der Seiten bei "pagination" zu beinhalten.
Was das Plugin genau tut, ist mir kein Begriff. Sieht so aus, als würde es den gesamten Inhalt wieder zurückgeben, obwohl der vorher in pages aufgeteilt war. Schau'n wir mal.
Vielleicht kann man über das gezeigt plugin auch auf $pages zugreifen und nur, wenn diese Variable > 1 ist, einen Text ausgeben, der auf weitere Seiten im Blog hinweist... obwohl... eigentlich ist es ja sinnvoller, den ganzen Text im Feed auszugeben.
Vielen Dank erstmal, ich probiere es demnächst gleich mal aus!
Hi,
ich mag die Möglichkeit von WordPress, einen langen Post in mehrere Seiten aufzuspalten. Das Problem dabei ist: Im Feed wird nur die erste Seite angezeigt, und es fehlt jeglicher Hinweis, dass eine Folgeseite existiert. Somit entgeht dem Feedleser einiges, weil er ja nicht weiß, dass da noch was kommen soll.
Nun würde ich gerne entweder mittels filter oder action immer den vollen Feed anzeigen, egal ob Multipage oder nicht, oder einfach einen Kommentar anfügen, dass es sich um einen Multipage-Post handelt, so dass der Rest über das Blog gelesen werden kann.
Ich habe hier im Forum schon einmal nachgeforscht:
http://bit.ly/ejdrtS
aber leider wurde auf den Post nicht geantwortet.
Hier gibt es mein Problem nochmal auf englisch:
http://bit.ly/g1IT3b
Wäre für Eure Hilfe und eine Lösung sehr dankbar.
Es würde mir auch helfen, wenn ich wüßte, wo das <!--nextpage--> tag im WordPress Quelltext überhaupt aussortiert wird. Vielleicht finde ich dann einen entsprechenden filter/action-hook.
Wenn ich das direkt aufrufen lasse (geht bei jedem Plugin), dann wird die ganze WP init Show umgangen, denn wenn die direkt angesprochene PHP Datei die wp-config.php bzw. wp-settings.php nicht selbst lädt (warum auch), dann kannst du das auch so nicht monitoren!
Und Exploits richten sich nur teilweise gegen den normalen Aufrufsweg, es gibt viele, die direkte PHP Aufrufe ausnutzen. Diese bekommst du gar nicht mit!Was du versuchst, kann bestenfalls einen Bruchteil der Zugriffe abweisen, 100% bekommst du nur mit .htaccess und Auswertung der Apache Logs hin.
Da gebe ich Dir vollkommen recht - das habe ich auch schon mal irgendwo gehört. Tatsache ist aber, dass ich bereits per "init" logge (durch Zufall über ein Plugin) und da einen Haufen Zugriffe sehe, die ich nicht will.
Also dachte ich mir, es wäre einfach, ein Log anzulegen, auszuwerten, die Anzahl der Zugriffe pro IP anzuzeigen, vielleicht noch die dnsbl.abuse.ch mit einzubringen. Der User entscheidet dann, ob er eine IP zukünftig blocken will etc. pp.
Ich bin mir darüber im Klaren, dass ich damit nicht alles blocke.
ABER:
Mit dem bisherigen Log und einem deny in der .htaccess konnte ich durchaus bereits einen großen Teil ausfindig machen. Ich wollte mir einfach den ständigen Eingriff in die .htaccess und das Auswerten der Logs etwas vereinfachen, indem ich den Großteil über ein Plugin abfange.
Es sollte auf keinen Fall zu einer der müßigen Debatten über den Sinn und Unsinn von Antispam-Maßnahmen bei Blogs ausarten... :-)
Ich verstehe das Problem nicht.
OK, ich versuche es noch einmal zu erklären, was ich vorhabe - ist im Grunde genommen ganz simpel.
Das Plugin soll SO FRÜH WIE MÖGLICH (also via "init" Hook) die Zugriffe auf das Blog loggen. So kann ich erkennen, ob z.B. auf die wp-pass.php zugegriffen wurde, um einen Exploit auzunutzen.
Versuche ich das mit "template_redirect", dann werden nur halb so viele Zugriffe geloggt wie bei "init", das habe ich schon probiert. "init" ist da einfach detaillierter, weil es sehr früh im Prozess aufgerufen wird.
OK, ich klinke mich also bei "init" ein und logge mit. Gleichzeitig übrprüfe ich die IP auf eine Blacklist (die man im Admin-Bereich verwalten können soll). Soll die IP geblockt werden, ist hier Schluss, das Plugin verabschiedet sich dann mit einem simplen "die()" oder gibt nen Link für nen Honeypot aus oder wie auch immer.
Natürlich könnte ich jetzt via "template_redirect" noch einmal alle Zugriffe auf nen Post loggen. Aber dann logge ich 2 Mal (unnötig) und kann geblockte Zugriffe nicht mehr feststellen, weil ja vorher schon abgebrochen wurde und der Request "template_redirect" gar nicht mehr erreicht.
Ich möchte in der Statistik aber gerne angeben können:
"... von ... Zugriffen auf Post #ID geblockt".
Das bekäme ich locker raus, indem ich einfach das Log, was ich bei "init()" anlege, später auswerte. Dazu brauche ich die Post-ID. Die gibt es aber bei "init()" nicht, daher kommt mir url_to_postid() ganz gelegen: einfach URL auslesen, via url_to_postid() umwandeln, in DAS SELBE LOG eintragen und fertig!
Einziges Problem:
url_to_postid() funktioniert noch nicht bei "init()"!
Stellt sich also die Frage, WANN ich per url_to_postid() die Umwandlung vornehmen kann... mittlerweile glaube ich, das geht nur zur Laufzeit, also wenn die Statistik erstellt/aufgerufen wird.
War das verständlich(er)? :-)
Meine Idee soweit: Einfach in der Datenbank nachschauen...da ist ja der postslug, also Permalinktitel hinterlegt. Damit sollte sich dann auch die ID herausfinden lassen. Zusätzlich (ein Titel könnte ja mal doppelt sein), kann man ebenfalls noch einen Teil des Datums vergleichen.
Danke, da habe ich auch schon dran gedacht. Ich halte das aber für nicht sinnvoll, da man dann immer genau auslesen muss, wie die Permalink-Struktur des Blogs ist, und dann per RegEx den Titel aus der URL herauslösen etc. Das ist m.E. zu kompliziert...
Vielleicht tut es ja auch die Funktion url_to_postid aus der rewrite.php
Gruß
Ingo
Das hört sich gut an!
Muss ich mal testen.
Danke!
[Edit1]
Hier der Code der Funktion (die Site ist übrigens Anlaufstelle No. 1):
PHPXref.com - WordPress 2.5 - /wp-includes/rewrite.php source
Klingt viel versprechend...
[Edit2]
Hmmm... kann ich innerhalb von "init" wohl noch nicht verwenden, weil ich denke, dass da "wp" und so weiter noch nicht initialisiert sind. Das ist aber egal: loggen kann ich ja die URL. Umformen kann ich es ja dann im Admin-Panel... obwohl es mir lieber wäre, gleich die Post-ID in die Datenbank zu schreiben... mal schauen... Vorschläge sind willkommen...
Hallo!
Ich habe folgendes Problem:
Über den "init" Action Hook möchte ich bestimmte IPs blocken, weil man dort einfach mehr Informationen über die URL erhält als bei "template_redirect" (manche Aufrufe gelangen gar nicht bis template_redirect)...
Die Post ID (falls ein Post besucht wurde) erhalte ich da aber leider noch nicht, weil $wp_query noch nicht initialisiert ist.
Aber: ich habe ja die URL und somit den Permalink.
So weit, so gut. Die URL alleine hilft mir aber nichts. Gibt es in WP eine Funktion, die für eine Permalink-URL die Post ID zurückgibt??? Dann wäre ich all meine Sorgen los! :-)
Post-Statistiken kann man zwar über template_redirect auch erstellen, da gibt's dann auch $wp_query (und Zugriff auf die Post ID via $wp_query->post->ID)... aber IPs möchte ich so früh wie möglich blocken und trotzdem deren Post ID feststellen, damit ich eine Statistik erstellen kann ("xyz Zugriffe auf [Post ID] geblockt").
Hoffe, man versteht, was ich meine... :confused:
Für andere Vorschläge (z.B. ein Hook, der dazwischen liegt) bin ich natürlich auch dankbar.
Hab das Problem auch schon im wordpress.org-Forum eingestellt, aber leider noch keine Antwort erhalten.
Vielen Dank im Voraus!
Freut mich, dass Du das hingekriegt hast. Nicht so ideal ist die Lösung natürlich, da die Query jetzt doppelt ausgeführt wird, aber ich nehme mal an, das ist nichts was bei jedem Seitenaufruf aufgerufen wird, oder?!
Nein, keine Angst... das soll nur aufgerufen werden, wenn der User im Admin Panel einen Formularbutton klickt, der da heißt "Block IP". :-)
Wollte dabei nur sichergehen, das dabei auch alles richtig ausgeführt wird und der User die entsprechende Rückmeldung bekommt.
Trotzdem: vielen Dank für die Hilfe!
... und ja: bin ein schlaues Kerlchen, net? :-D
Das hier scheint zu funktionieren:
Funktion:
=======
function block_ip($ip) {
global $wpdb;
$query = "INSERT IGNORE INTO wp_blocked_ips (ip) VALUES ('$ip')";
if ($wpdb->query($query) === FALSE) {
return FALSE;
} else {
return $wpdb->get_results($query);
}
}
Aufruf:
=====
$blocked = block_ip('123.456.789.012');
if (!($blocked === FALSE)) {
echo "Everything went fine.";
} else {
echo "An error has occured!";
}
Das mit dem DB-Handler ->dbh und mysql_error() funktioniert leider nicht...
Was Du zitierst gilt für die Funktion query(), welche Du aber ja gar nicht aufrufst. get_results() liefert dagegen einfach die Ergebnisse zurück und weiß von MySQL-Fehlern nichts.
Ooops, du hast Recht, vielen Dank!
Das ist mir gar nicht aufgefallen. :)
Könnte ich dann nicht einfach ein query() vorschalten, und wenn es FALSE ergibt, dann gab es einen Fehler?
function block_ip($ip) {
global $wpdb;
$query = "INSERT IGNORE INTO wp_blocked_ips (ip) VALUES ('$ip')";
if ($wpdb->query($query) === FALSE) {
return FALSE
} else {
return $wpdb->get_results($query);
}
}
Das einzige Problem, was ich damit habe, ist der Unterschied zwischen "==" und "===", wie es auch im Codex beschrieben wird.
ZitatNote: since both 0 and FALSE can be returned, make sure you use the correct comparison operator: equality == vs. identicality ===
Muss ich also "===" verwenden, wie ich es vorstehend getan habe?
Und würde dann der Aufruf
$blocked = block_ip('123.456.789.012');
if ($blocked) {
echo "Everything went fine.";
} else {
echo "An error has occured!";
}
zum gewünschten Erfolg führen?
Ich sehe da das Problem, dass block_ip() entweder ein Object oder FALSE zurückgeben soll... geht das denn, sprich, wenn $blocked nicht FALSE ist, gibt es dann TRUE zurück und ist gleichzeitig ein Object, auf das ich zugreifen könnte?
Ich hoffe, man versteht, was ich sagen will... :confused:
Hallo,
weiß vielleicht jemand, wie ich unter Benutzung der $wpdb-Class einen möglichen SQL-Fehler abfangen kann?
Nehmen wir an, ich benutze folgende Funktion:
function block_ip($ip) {
global $wpdb;
$query = "INSERT IGNORE INTO wp_blocked_ips (ip) VALUES ('$ip')";
return $wpdb->get_results($query);
}
Die rufe ich dann so auf:
$blocked = block_ip('123.456.789.012');
if ($blocked) {
echo "Everything went fine.";
} else {
echo "An error has occured!";
}
Das Problem ist nur, dass $blocked immer TRUE ist, auch wenn ich die Abfrage oben so ändere, dass ein Fehler herauskommen muss.
Ich habe auch bereits andere Implementationen gesehen, wie z.B.
oder
wobei $items bzw. $results das query-Ergebnis darstellen.
Irgendwie wird da aber nur überprüft, ob überhaupt ein Ergebnis vorliegt, nicht, ob ein Fehler aufgetreten ist.
Hier möchte ich jedoch einen Unterschied machen, weil ich den User darauf hinweisen will, ob nur kein Ergebnis vorlag oder aber ein Fehler (so dass er nachschauen kann, ob die Tabelle überhaupt existiert etc.).
Weiß jemand, wie das mit der $wpbd-Class funktioniert?
Die Function Reference sagt dazu:
ZitatIf there are any query results, the function will return an integer corresponding to the number of rows affected and the query results will cached for use by other wpdb functions. If there are no results, the function will return (int) 0. If there is a MySQL error, the function will return FALSE. (Note: since both 0 and FALSE can be returned, make sure you use the correct comparison operator: equality == vs. identicality ===).
Was mache ich bei der Abfrage falsch?
Vielen Dank im Voraus!
Ich habe gelesen, dass die Einbettung via JavaScript die beste Methode ist, um XHTML-konform zu sein. Alle anderen <object><embed>-blabla-Geschichten sind nicht konform, weil es <embed> eigentlich nicht gibt (siehe auch hier). Außerdem... wer hat denn JavaScript heutztage NICHT aktiviert? :-) Ohne JavaScript würde einiges bei mir sowieso nicht funktionieren...
Nun, mal sehen, wie ich es mache... immerhin ist das SWFObject 2.0-Script nur so um die 8 kB groß, das geht immer.
Jau, daran hatte ich auch schon gedacht.
Vielleicht ist es wirklich einfacher, das JavaScript selber einzubetten, als auf zwei Plugins hintereinander aufzubauen...
Zitat
Stimmt, hatte ich ganz vergessen.
Ich habe gerade etwas anderes wiedergefunden, was mir evtl. das Laden des Scripts erspart und trotzdem XHTML-konform ist:
How to correctly insert a Flash into XHTML » La Trine
Allerdings wäre das Javascript bestimmt die bessere Wahl.
Elke:
Was genau macht Dein Plugin eigentlich?
Aber immerhin weiß ich jetzt, dass ich mit $_POST('post_content') an den Inhalt rankomme. Den könnte ich ja dann ändern. Muss ich dann nur noch in etwa sowas ans Ende schreiben:
???
Alphawolf:
Wäre mir auch lieber, dass zur Laufzeit zu ersetzen, aber ich weiß nicht, wann und wie ich da ansetzen soll, weil mein Plugin ja einen Code ausgibt, der von dem anderen Plugin wieder geparst wird, also muss ich das vorher umwandeln... Das KIMILI plugin benutzt ob_start(). Ich hab keine Ahnung...
Ich könnte allerdings die Funktion des Plugins selber übernehmen. Es macht im einfachsten Falle ja nichts anderes, als ein JavaScript zu laden und dann eine Klasse zu instanzieren.
Bekomme ich irgendwie innerhalb meines Plugins raus, ob das andere Plugin vorhanden ist und ob es evtl. bereits das SWFObject (JavaScript) in den Header lädt?
Ich muss es ja nicht unnötig zweimal laden...
Wenn Du genau beschreibst, was das Plugin leisten soll und wann es tatsächlich in Aktion treten soll (beim Speichern oder beim Anklicken der Tags im Frontend :confused:), dann kann ich Dir vielleicht weiterhelfen.
VG Elke
Oh.. oops, ich dachte, das könnte man erkennen, sorry.
Also, ich tippe irgendwo in meinen Post ein bestimmtes Tag ein, wie z.B. "[embed_viewat height=100 width=300 id=1234]". Das soll ein Flash Panorama Image einbetten.
Dann schreibe ich vielleicht noch was dazu, wie toll das Bild ist. :-)
Zum Schluss klicke ich entweder auf "Save and continue editing" oder auf "Publish".
Hier soll das Plugin einschreiten:
noch bevor der Content in die Datenbank geschrieben wird, soll das Plugin den oben genannten Befehl "[...]" durch einen anderen (Aufruf des anderen Plugins, was dann später mit Filter greift) ersetzen und dann erst den Content in der Datenbank speichern.
Eine Fehlerbehandlung wäre auch wichtig, soll heißen: wenn mein Plugin nicht richtig aufgerufen wurde, dann bitte eine Fehlermeldung ausgeben und wieder unverändert zurück zum Editieren des Posts...
Jetzt verständlicher? :-)
Danke für die Hilfe!
Hallo,
ich möchte ein Plugin schreiben, dass auf einem zweiten Plugin aufbaut.
Das zweite Plugin wird über Tags im Content angesteuert und zur Laufzeit über ob_start() getriggert. D.h., die Tags bleiben immer unverändert im Content erhalten.
Mein Plugin soll nun auch über Tags gesteuert werden. Wenn nun der Post gespeichert/veröffentlicht wird, sollen meine Tags durch die Tags zum Aufruf des anderen Plugins im Content ersetzt werden.
Ich dachte da an den save_post action hook.
Problem:
Wie benutze ich den, wie schreibe ich den geänderten Content zurück in die Database und wie verhindere ich über dieses "updaten", dass save_post erneut getriggert wird und ein Loop entsteht?
Habe auch schon im englischen Original-Forum geposted...
wen es interessiert:
WordPress › Support » How Can One Parse The Post Contents For A Tag?
Würde mich über Antworten sehr freuen.
PS:
Das RegEx-Problem im obigen Post ist ein ganz anderes.
Dazu habe ich auch schon wo anders Hilfe gesucht:
[URL="http://www.phpfreaks.com/forums/index.p…c,195000.0.html"]HowTo Replace A Pseudo-Tag With Text[/URL]
Yo Tim,
Kommenar 166 auf der Plugin-Homepage:
---Quote---
I had the same problem with the infinite loop a while ago, when I was using the unstable version of WP. I fixed it by replacing this line:
if ( (!empty($_COOKIE[USER_COOKIE]) && !wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true)) || (empty($_COOKIE[USER_COOKIE])) )
with this line:
I don’t know if that is strictly correct, but it seems to work fine. Hope that helps.
Cheers
Julian
---UNQUOTE---
BTW:
Das Argument für "!" sollte auch in Klammern stehen:
Ich habe Dir mal das Plugin mit der Änderung per eMail geschickt.
Sag mal Bescheid, ob es funktioniert.
Ich Dämel... das mod_rewrite.so-Modul ist in XAMPP nicht standardmäßig geladen - habe die httpd-config geändert, wie nachfolgend beschrieben, und siehe die: Permalinks gehen wieder!
"If you want to use permalinks, you will need to make a change inside another file:
Click the Start button, followed by My Computer > Main drive > Xampplite > apache > Conf and find the file httpd.conf. Open that in a text editor. Use the search facility in the editor to find "rewrite". The line you need looks like this:[INDENT] #LoadModule rewrite_module modules/mod_rewrite.so [/INDENT]You need to take away the hash sign so it looks like this[INDENT] LoadModule rewrite_module modules/mod_rewrite.so [/INDENT]Now just save the file."
Perfekt!
Ach ja, unter der xampp-Testumgebung läuft alles wunderbar.
Bei mir komischer Weise nicht. Habe eine Testinstallation unter XAMPP laufen, da funktionieren nur die Standard-Permalinks, keine "Pretty Permalinks"... Habe unter 2.3 das Format "/%year%/%monthnum%/%day%/%postname%/", das auf meinem all-inkl-Server mit WP 2.3.3 super läuft.
Bei der XAMPP-Testinstallation funktioniert weder ein einziger Post noch eine Seite mit den "Pretty Permalinks".
.htaccess ist vorhanden und auch beschreibbar.
Testblog liegt in einem Unterverzeichnis der http-docs.
Eine Testinstallation von WP 2.2 lief damals ohne Probleme...
Hat jemand ne Idee?
Ich glaub´ wenn hier nicht noch ein Crack eine Idee hat, werde ich erstmal wieder auf 2.3.3 upgraden müssen :-?.
Schade eigentlich, das neue backend gefällt mir nämlich gut.
Hmm, wenn es dafür keine Lösung gibt, werde ich auch erstmal bei 2.3.3 bleiben... auch, weil es noch kein WP 2.5 taugliches Update von "Popularity Contest" gibt... :-)