Zurück   WordPress Deutschland Forum > Support > Konfiguration

Antwort
 
Themen-Optionen Ansicht
Alt 28.08.2008, 17:04   #1 (permalink)
PostRank: 3
 
Registriert seit: 24.07.2005
Beiträge: 136
sortierte Beitagsliste

Hallo,

ich nutze Wordpress für ein Online-Filmmagazin. Jetzt möchte ich auf einer anderen Internetseite folgende Ausgabe aus der WP-Datenbank generieren:

Eine alphabetisch sortierte Listen der Beiträge von author=x und cat=y, wobei die alphabetische Sortierung nach dem Inhalt des "Auszug"-Feldes vorgenommen werden soll.

Kann mir da jemand ein kleines PHP-Skript entwerfen? Die Zugangsdaten für den MySQL-Zugriff auf die WP-Datenbank kann ich selbst eintragen.

Vielen Dank!
__________________
Meine WP-Blogs: SimulationsRaum | F.LM - Texte zum Film
F.LM ist offline   Mit Zitat antworten
Alt 28.08.2008, 20:25   #2 (permalink)
PostRank: 4
 
Benutzerbild von baex
 
Registriert seit: 22.02.2006
Ort: Baden-Baden/Baden
Beiträge: 163
Liegt die "andere Internetseite" auf einem anderen Server? Dann wäre es brandgefährlich, bei jeder Abfrage die Datenbank-Zugangsdaten über Netz zu schicken - findest Du nicht?

In diesem Fall arbeitest Du besser mit einem Parser, der einen von WordPress generierten RSS-Feed verarbeitet. Zum Beispiel SimplePie. Laut dem WP Codex müsste soetwas funktionieren: wp-rss2.php?cat=1?author=1. Irgendwie ist es auch zu schaffen, dass er alle Artikel in den Feed packt und nicht nur die im wp-admin angegebene Zahl. Da müsste ich aber selbst erstmal losgooglen

Es sollte auch möglich sein, sich von WP einen "nackten" Loop ausgeben zu lassen (entsprechend modifizierte Datei im Theme-Ordner oder so...) und die dann per PHP-Include einzubinden. (Nicht ganz so ressourseneffizient wie die Feed-Variante, weil Du nicht so leicht cachen kannst und jedes Mal eine Server-zu-Server-Abfrage durchs Netz geht, bevor der Besucher was sieht.)

Ich hatte mal Beiträge aus einer Installation in einer anderen auszugeben. Da beider unter der gleichen Domain liefen, hatte ich eine SQL-Abfrage gefrickelt, der die Beitragstitel direkt ausgelesen hatte. Das war auch ganz nett und sah so aus:

PHP-Code:
<?php 
$logphotos 
$wpdb->get_results("SELECT ID, guid, post_title FROM ".pl."_posts
    WHERE post_status = 'publish' AND post_type = 'post' ORDER BY ID DESC LIMIT 9"
);
foreach (
$logphotos as $logphotos) {?>
Du siehst, gleiche Datenbank, anderer Prefix. Danach folgt natürlich noch der Schleifeninhalt mit der eigentlich Abfrage.

Ein fertiges Script hab ich aber keins anzubieten.
__________________
www.felixbeck.de | flickr | del.icio.us
baex ist offline   Mit Zitat antworten
Alt 29.08.2008, 20:13   #3 (permalink)
PostRank: 3
 
Registriert seit: 24.07.2005
Beiträge: 136
Die abfragende Seite liegt auf demselben Server und ist sogar auch ein Wordpress-Blog.

Ich frage mich, ob das nicht einfacher zu bewerkstelligen ist. Immerhin gibt es ja den the_excerpt()-Tag. Dooferweise kann man dem keine Parameter übergeben.

Für mich wäre wichtig, einen author- und category-Parameter zu übergeben und das ganze dann noch in der alphabetischen Reihenfolge auszugeben.

Das hier wäre so eine Artikelliste: F.LM » Stefan Höltgen (damit mal klar ist, worum es mir geht: In den excerpten stehen die Titel der Filme, zu denen in dem Blog von mir Kritiken sind.)
__________________
Meine WP-Blogs: SimulationsRaum | F.LM - Texte zum Film

Geändert von F.LM (29.08.2008 um 20:16 Uhr).
F.LM ist offline   Mit Zitat antworten
Alt 29.08.2008, 22:29   #4 (permalink)
PostRank: 4
 
Benutzerbild von baex
 
Registriert seit: 22.02.2006
Ort: Baden-Baden/Baden
Beiträge: 163
Achso, das mit der Sortierung nach Excerpt hab ich jetzt erst verstanden

Ich weiß, im Nachhinein kommt das immer gut... aber wie kommst Du nur auf die Idee, dafür den Excerpt zu missbrauchen? Custom Fields wäre hier das Mittel des Wals gewesen...

Trotzdem glaube ich, das mein Weg direkt in die Datenbank letztendlich der Beste ist.

PHP-Code:
<?php $moviecritics $wpdb->get_results("SELECT ID, guid, post_title, post_excerpt 
FROM "
.pl."_posts 
WHERE post_status = 'publish' 
AND post_type = 'post' 
AND post_author = '1' 
AND post_category = '1' 
ORDER BY post_excerpt ASC"
);

foreach (
$moviecritics as $moviecritics ) {?>  
/* Und ab in die Schleife... */
Es juckt mich doch Hier ist vorrausgesetzt, dass die gleichen DB-Zugangsdaten verwendet werden ($wpdb). Dann holen wir die Werte ID, Permalink, Titel und Excerpt aus der Datenbank ins Array.

Der DB-Präfix ist hier pl. Veröffentlicht sollen die Artikel natürlich sein und es sollen Artikel sein, keine Seiten. Nur Artikel vom Autor mit der ID 1 und aus der Kategorie mit der ID 1. Sortieren wollen wir das Ganze absteigend.

So irgendwie müsste das tun...
__________________
www.felixbeck.de | flickr | del.icio.us
baex ist offline   Mit Zitat antworten
Alt 29.08.2008, 23:37   #5 (permalink)
PostRank: 3
 
Registriert seit: 24.07.2005
Beiträge: 136
excerpt habe ich genommen, weil das einerseits in der Übersicht ( F.LM » Home ) gleich angezeigt wird und andererseits schon automatisch über den Kritiken drüber steht. Ein bisschen unelegant ist es. Das gebe ich zu.

Deine Lösung werde ich morgen früh mal teste. Danke schon mal!!!
__________________
Meine WP-Blogs: SimulationsRaum | F.LM - Texte zum Film
F.LM ist offline   Mit Zitat antworten
Alt 29.08.2008, 23:54   #6 (permalink)
PostRank: 3
 
Registriert seit: 24.07.2005
Beiträge: 136
Ich hab das mal eben blind in den Loop meines Pages-Template eingesetzt und kriegen:

Code:
Parse error: syntax error, unexpected T_ENDWHILE in /is/htdocs/50786/www.dissimulation.de/simulationsraum/wp-content/themes/Blueleaves/test.php on line 28
Vielleicht siehst du den Fehler auf Anhieb?

Code:
<?php
/*
Template Name: Pages
*/
?>

<?php get_header(); ?>

<?php get_sidebar(); ?>

<div id="content">

<?php if (have_posts()) : ?>
		
	<?php while (have_posts()) : the_post(); ?>

<?php $moviecritics = $wpdb->get_results("SELECT ID, guid, post_title, post_excerpt 
FROM ".dissimulation_de."FLM_posts 
WHERE post_status = 'publish' 
AND post_type = 'post' 
AND post_author = '1' 
AND post_category = '3' 
ORDER BY post_excerpt ASC");

foreach ($moviecritics as $moviecritics ) {?>  


	<?php endwhile; ?>

		<p align="center"><?php next_posts_link('&laquo; Previous Entries') ?>   <?php previous_posts_link('Next Entries &raquo;') ?></p>

	<?php else : ?>
		<h3 align="center">Not Found</h3>
		<p align="center">Sorry, but you are looking for something that isn't here.</p>
	<?php endif; ?>
		</div>

<!-- end content-->

<?php get_footer(); ?>


	</div>
</body>
</html>
Die Datenbank-Tabelle heißt "FLM_posts", die Datenbank heißt "dissimulation_de", der autor=1, die category=3.
__________________
Meine WP-Blogs: SimulationsRaum | F.LM - Texte zum Film

Geändert von F.LM (29.08.2008 um 23:57 Uhr).
F.LM ist offline   Mit Zitat antworten
Alt 30.08.2008, 03:53   #7 (permalink)
PostRank: 4
 
Benutzerbild von baex
 
Registriert seit: 22.02.2006
Ort: Baden-Baden/Baden
Beiträge: 163
Zitat:
Zitat von F.LM Beitrag anzeigen
Die Datenbank-Tabelle heißt "FLM_posts", die Datenbank heißt "dissimulation_de", der autor=1, die category=3.
Wenn das so ist, hast Du einige hübsche Fehler eingebaut Die Schleife ist in unserem Fall das foreach. Wir arbeiten ausdrücklich nicht mit einer WordPress Loop! (Machen praktisch das, was die WP Loop macht, einfach selbst.)

Da wir ja wissen das Artikel vorhanden sind (und die Sache nur für den Eigenbedarf geschrieben wird) schenken wir uns einfach mal irgendwelche If-Abfragen

Bevor ich jetzt Code poste, frage ich nochmal nach. So wie das im Moment gelöst ist, greift er auf die WordPress-Datenbankabfrage $wpdb zurück. Das funktioniert aber ausdrücklich nur dann, wenn beide Installationen in der gleichen Installation mit unterschiedlichen Präfixen laufen.

Ich gehe deshalb nun einfach mal davon aus, dass beide Installationen in der Datenbank dissimulation_de liegen und dass die, auf die wir gleich zugreifen werden, den Präfix FLM_ hat.

PHP-Code:
<ul>

<?php $moviecritics $wpdb->get_results("SELECT ID, guid, post_title, post_excerpt 
FROM "
.FLM."_posts 
WHERE post_status = 'publish' 
AND post_type = 'post' 
AND post_author = '1' 
AND post_category = '3' 
ORDER BY post_excerpt ASC"
);

/* Hier kommt die Schleife! */
foreach ($moviecritics as $moviecritics ) {?>  
 <li>
  <a href="<?php echo $moviecritics->guid;?>"><?php echo $moviecritics->post_excerpt?></a>
 </li>
<?php ?>

</ul>
Das ganze packst Du jetzt irgendwo in ein Template File außerhalb eines Loops, aber innerhalb von WordPress (versteht sich, da wir ja die Datenbankabfrage von WordPress brauchen)

Die Abfragen nach der ID und dem post_title brauchen wir so erstmal nicht. Sollten die tatsächlich überflüssig werden, löschst Du die einfach oben in Zeile 3. Alternativ könnte man noch ein Datum aus der Datenbank holen

Ich hoffe das tut jetzt. Code so ins Blinde herin schreiben ist gar nicht so einfach... Lustig wird es übrigens, wenn in Deinen Excerpt-Inhalten auch noch mit Paragraph-Tags gearbeitet wird. Aber jetzt bau's mal ein, dann schaun wir mal.
__________________
www.felixbeck.de | flickr | del.icio.us
baex ist offline   Mit Zitat antworten
Alt 30.08.2008, 06:56   #8 (permalink)
PostRank: 3
 
Registriert seit: 24.07.2005
Beiträge: 136
Ja, die Installationen von wp liegen im selben Verzeichnis und mit verschiedenen Tabellen-Präfixen in der selben Datenbank.

Ich habe deinen Code in ein neues Template namens "test" eingebaut:

Code:
<?php
/*
Template Name: test
*/
?>

<?php get_header(); ?>

<?php get_sidebar(); ?>

<div id="content">

<ul>

<?php $moviecritics = $wpdb->get_results("SELECT ID, guid, post_title, post_excerpt 
FROM ".FLM."_posts 
WHERE post_status = 'publish' 
AND post_type = 'post' 
AND post_author = '1' 
AND post_category = '3' 
ORDER BY post_excerpt ASC");

/* Hier kommt die Schleife! */
foreach ($moviecritics as $moviecritics ) {?>  
 <li>
  <a href="<?php echo $moviecritics->guid;?>"><?php echo $moviecritics->post_excerpt; ?></a>
 </li>
<?php } ?>

</ul>

</div>

<!-- end content-->

<?php get_footer(); ?>


	</div>
</body>
</html>
und eine Seite geschrieben, die "test" heißt und das Template benutzt:

SimulationsRaum » test

Die bleibt aber, wie du siehst, leer. Wahrscheinlich habe ich irgend etwas falsch gemacht?
__________________
Meine WP-Blogs: SimulationsRaum | F.LM - Texte zum Film

Geändert von F.LM (30.08.2008 um 08:04 Uhr).
F.LM ist offline   Mit Zitat antworten
Alt 30.08.2008, 08:22   #9 (permalink)
PostRank: 3
 
Registriert seit: 24.07.2005
Beiträge: 136
Ich glaube, ich habe den Fehler gefunden:

AND post_category = '3'

ergibt so keine Ergebnisse. Ich habe die Zeile mal entfernt - jetzt werden alle Beiträge von author=1 angezeigt.

In der Datenbank steht (seltsamerweise) in der Spalte "category" bei allen Beiträgen der Wert "0". Das heißt, der cat=3 muss in irgend einer anderen Datenbank-Tabelle stehen.

kuk ma: Schreibt keine daten in post_category und doppelte einträge!

Das ist dann der Wert term_taxonomy_id=2 in der Tabelle FLM_term_taxonomy

Wie baut man denn da jetzt noch eine zusätzliche Abfrage dieser zweiten Tabelle ein?
__________________
Meine WP-Blogs: SimulationsRaum | F.LM - Texte zum Film

Geändert von F.LM (30.08.2008 um 10:39 Uhr).
F.LM ist offline   Mit Zitat antworten
Alt 30.08.2008, 13:23   #10 (permalink)
PostRank: 4
 
Benutzerbild von baex
 
Registriert seit: 22.02.2006
Ort: Baden-Baden/Baden
Beiträge: 163
Zitat:
Zitat von F.LM Beitrag anzeigen
Ich glaube, ich habe den Fehler gefunden:

AND post_category = '3'

ergibt so keine Ergebnisse. Ich habe die Zeile mal entfernt - jetzt werden alle Beiträge von author=1 angezeigt.

In der Datenbank steht (seltsamerweise) in der Spalte "category" bei allen Beiträgen der Wert "0". Das heißt, der cat=3 muss in irgend einer anderen Datenbank-Tabelle stehen.

kuk ma: Schreibt keine daten in post_category und doppelte einträge!
Shit, da hab ich gar nicht drangedacht Ja, da war was. In der guten alten Zeit, also damals...

Zitat:
Zitat von F.LM Beitrag anzeigen
Das ist dann der Wert term_taxonomy_id=2 in der Tabelle FLM_term_taxonomy
Ja, aber...wenn ich das überschaue, liegen die Verknüpfungen Artikel - Kategorien & Tags alle in der Tabelle termin_relationships.

Zitat:
Zitat von F.LM Beitrag anzeigen
Wie baut man denn da jetzt noch eine zusätzliche Abfrage dieser zweiten Tabelle ein?
Na, gehen wir einen ganz dreckigen Weg

PHP-Code:
<ul>

<?php $moviecritics $wpdb->get_results("SELECT ID, guid, post_title, post_excerpt 
FROM "
.FLM."_term_relationships
WHERE post_status = 'publish' 
AND post_type = 'post' 
AND post_author = '1' 
AND post_category = '3' 
ORDER BY post_excerpt ASC"
);

/* Hier kommt die Schleife! */
foreach ($moviecritics as $moviecritics ) {

 
$rightcategory $wpdb->get_results("SELECT term_taxonomy_id
  FROM "
.FLM."_posts 
  WHERE object_id = $moviecritics->guid;

  if($rightcategory->term_taxonomy_id == 3) { ?> 
  <li>
   <a href="
<?php echo $moviecritics->guid;?>"><?php echo $moviecritics->post_excerpt?></a>
  </li>

<?php } } ?>
</ul>
Du siehst, ich habe in die Schleife einfach nochmal eine Datenbankabfrage gepackt und das ganze dann per if gecheckt.

Teste das mal, es ist besch... dass ich das nicht gleich selbst machen kann In der Zeile
PHP-Code:
  WHERE object_id ''.$moviecritics->guid;.''
bin ich mir nicht ganz sicher, ob da hinten die Syntax richtig ist. Aber test' das mal...

Liebe Edith, das mit der Syntax ist geklärt. Der Code oben sollte so richtig sein. Ausprobieren! (-:
__________________
www.felixbeck.de | flickr | del.icio.us

Geändert von baex (30.08.2008 um 15:20 Uhr).
baex ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 | Impressum | Ein Inpsyde.com Projekt