Wordpress & PHP Problem

noshapes

Grünschnabel
Hallo zusammen,

aktuell versuch ich gerade in in Wordpress die Tags mittels get_the_tags auszulesen was gut klappt. Wird ja auch im selben Code vorgemacht ;-) Nun soll aber entweder folgender Code benutzt werden:
PHP:
<?php
$tagdisplay='';
unset($tagdisplay); // failsafe
$posttags = get_the_tags($post->ID);
if(!empty($posttags)){
foreach($posttags as $this_tag){
$tagdisplay = $tagdisplay . "".$this_tag->name.", ";
}
}
echo substr($tagdisplay,0,-2);
?>

Wo jeder einzelne Tag dort eingefügt und anschließend vom Plugin verarbeitet wird:
PHP:
<?php
if ( function_exists( 'wikibox_summary' ) )  wikibox_summary(
'$tagdisplay' ); ?>

Das $tagdisplay habe ich im letzten Code eingefügt in der Hoffnung das es Sinn macht und das passiert was ich mir wünsche. Leider war das nicht der Fall.

Jetzt habe ich keine Ahnung wie es weitergehen soll.

Eine weitere Möglichkeit ist folgende
http://en.wikipedia.org/w/index.php?title=Email&action=render

anstatt Email hinter title= die jeweilige Variabel einfügen und verarbeiten lassen und so sagte man mir mit strip_tags arbeiten. Was auch immer das macht, kann und bewirkt.

Vielleicht gibt es hier Lösungansätze und welche der Versionen besser ist. Es soll jedes Tag verarbeitet werden und ein maximal 150 Wörter umfassender Anfang (Summary) des jeweiligen Wiki-Artikels ausgegeben werden.

Würde mich freuen wenn es hier Hilfe gibt. Danke!
 
Nun habe ich folgenden Code erhalten:

PHP:
<?php
function getWikiIntroParagraph( $title ) {
 $url = 'http://en.wikipedia.org/w/index.php?' . build_http_query(array( 'title' => $title, 'action' => 'raw' ));
 // Download $url and do your magic extraction
 return $intro;
}
 
$posttags = get_the_tags();
if ($posttags) {
  echo '<ul>';
  foreach($posttags as $tag) {
    echo '<li><strong>' . htmlspecialchars( $tag ) . '</strong>: ' . getWikiIntroParagraph( $tag->name ); 
  }
  echo '</ul>';
}
?>

In der Zeile mit der URL tritt dieser Fehler auf:
Fatal error: Call to undefined function build_http_query()

in der Zeile mit den htmlspecialchars kommt:
Warning: htmlspecialchars() expects parameter 1 to be string, object given

Das bedeutet nun was?
Man gab mi den Hinweis, das ein Array benötigt wird -> für mich als nicht Programmieren eines von vielen böhmischen Dörfern. Weiß jemand weiter?
 
Fatal error: Call to undefined function build_http_query():

Die Funktion build_http_query() ist keine PHP-Funktion. Ergo muss sie Bestandteil von Wordpress sein, oder derjenige der die den Code gegeben hat, hat vergessend diese Funktion mitzuliefern. Am besten fragst du dort an, wo d den Code her hast.


Warning: htmlspecialchars() expects parameter 1 to be string, object given

Einer der Tags scheint kein String zu sein. Darum die Warning. Eine Warning ist aber kein Fehler der zu einem Nichtfunktionieren des Codes führt.
Du kannst aber den $tag mit (string) in ein String wandeln
PHP:
... htmlspecialchars( (string)$tag ) ...
 
Danke, Yaslaw.

Zum ersten Fehler: Doch, es ist eine PHP-Funktion.
http://us.php.net/manual/en/function.http-build-query.php

Zum zweiten (gilt auch für den ersten Fehler): ich habe keinen Schimmer wie ich das ändern müsste. Doof gefragt: Wo bekomme ich den String her um den einfügen zu können? Kreiere ich den selbst? Wenn ja, wie? Entnehme ich den von woanders? Wenn ja, wo und wie? Was heißt String in diesem Fall? Das die Auflistung ohne Komma aufhört zum Beispiel oder...?
 
Grüße,

also "http_build_query" ist schon eine PHP-Funktion...hast du auch verlinkt. Jedoch ist "build_http_query" so wie du es in deinem Code benutzt keine -> du siehst also: Wortdreher ;)

Zu deiner 2. Frage - wie das zu ändern ist:
Der String ist in deinem Fall einfach ein Eintrag im Array "$posttags", welches du mit deiner foreach-Schleife durchläufst.
Was Yaslaw dir da geschrieben hat wird als CAST bezeichnet und kann für explizite Typumwandlungen genutzt werden. Soll heißen du hast eine Fließkommazahl, willst aber nur den ganzzahligen Wert haben -> dann kannst du nach Integer "casten".

PHP:
$var = 1.234;
$var = (int)$var;
 
Danke, Alex_T!

Achso, naja, gut, dass das nicht mein Code ist oder schlecht wie man es sehen möchte. Wenn es meiner wäre könnte ich PHP ja schon ein bisschen oder mittelmäßig, kann ich aber nicht und weiß nun nicht wie das zu bereinigen ist.

OK, also lag ich mit meiner Vermutung bezüglich des letzten fehlenden Kommas nicht so falsch. Wird halt alles was nach einem Punkt, Komma kommt weggekürzt, wenn ich das richtig verstehe. Also im Falle des Beispiels auf eine ganze Zahl gekürzt. So kann ich also das Beispiel von Yaslaw oben ohne Bedenken verwenden also
PHP:
htmlspecialchars( $tag )
mit
PHP:
htmlspecialchars( (string)$tag)
ersetzen. Folglich ist der Fehler weg. Fehlt nur noch der erste.

//EDIT
Was built_http_query angeht.
Ein paar Zeilen vorher werden die Tags abgerufen und ausgegeben:
PHP:
<?php if(get_the_tags()) { ?> <img src="<?php bloginfo('template_url'); ?>/images/tag.png" /> <?php  the_tags('Tags: ', ', '); } ?>

Kann ich davon etwas für die Verarbeitung in der build_http_query Angelegenheit nutzen? Oder muss ich das nochmals machen und in Arrays auflösen? Also, dass die einzelnen Tags in individuelle Arrays temporär angelegt werden und so auch einzeln verarbeitet werden können. Auch hier gilt: Wenn ja, wie?
 
Zuletzt bearbeitet:
Erhalte nun aufgrund der Umwandlung in einen String folgenden Fehler:
Catchable fatal error: Object of class stdClass could not be converted to string

Betrifft die Zeile mit dem htmlspecialchars.
 
Auch wenn ich htmlspecialchars durch htmlentities ersetze erhalte ich die gleiche Meldung.

Catchable fatal error: Object of class stdClass could not be converted to string

Setze ich ich in der Zeile davor ein:
PHP:
echo $tag;
wird nichts ausgegeben. Wie kann das sein?
Verstehe die beiden Fehler nicht.
 
Zuletzt bearbeitet:
Hallo,

danke für Hilfe bei den ganzen Kleinigkeiten, habe jetzt folgenden Code:

PHP:
<?php
function getWikiIntroParagraph( $title ) {
 $url = 'http://en.wikipedia.org/w/index.php?' . http_build_query(array( 'title' => $title, 'action' => 'raw' )) . $tag . '&action=render';
 // Download $url and do your magic extraction
 return $intro;
}
 
$posttags = get_the_tags();
if ($posttags) {
  echo '<ul>';
  foreach($posttags as $tag) {
    echo '<li><strong>' . htmlspecialchars( $tag->name ) . '</strong>: ' . getWikiIntroParagraph( $tag->name ); 
  }
  echo '</ul>';
}
?>

$intro ist nicht nähere definiert, meine Idee wäre das jetzt mit folgendem Code eine Extraktion (excerpt) des Textes der unter der generierten URL zu finden ist zu erhalten. Leider weiß ich nur aufgrund der Recherche dass es sowas gibt allerdings nicht wie und wo man es einbauen muss. Irgendjemand eine Idee für mich?

Hier der Code
PHP:
function truncate ($str, $length=35, $trailing='...')
{
$length-=mb_strlen($trailing);
if (mb_strlen($str)> $length
{
return mb_substr($str,0,$length).$trailing;
}
else
{
$res = $str;
}
return $res;
}

Desweiteren nehme ich an, dass ich das $res oben im Code mit $intro ersetzen kann damit dies dann auch ausgegeben wird, ja?
 
PHP:
<?php
function getWikiIntroParagraph( $title ) {
 $url = 'http://de.wikipedia.org/w/index.php?' . http_build_query(array( 'title' => $title, 'action' => 'render' ));
 // Download $url and do your magic extraction
$start = strpos($url, '<p>');
$end = strpos($url, '</p>', $start);
$intro = substr($url, $start, $end-$start+4);
$intro = html_entity_decode(strip_tags($intro));
return $intro;
}
 
$posttags = get_the_tags();
if ($posttags) {
  echo '<ul>';
  foreach($posttags as $tag) {
    echo '<li><strong>' . htmlspecialchars( $tag->name ) . '</strong>: ' . getWikiIntroParagraph( $tag->name ); 
  }
  echo '</ul>';
}
?>

Das ist was ich jetzt habe. Gibt aber nur die Ausgabe der ersten vier Zeichen der URL also http
Was muss ich machen damit ich den Inhalt bekomme und nicht die URL? Und wie schaffe ich es zwei Absätze zu extrahieren?
 
Zurück