Navigation überspringen

WordPress-Posts für Literar-Mechana-Meldung als Tabelle ausgeben

28.12.2022·Kommentare:  0Retweets:  0 2

Wer Blogger:in (und damit Urheber:in) sowie Mitglied bei der Literar-Mechana ist, kann dort seine Blogposts für die Reprographievergütung, die sich aus der Urheberrechtsabgabe speist, melden. Für WordPress habe ich folgendes PHP-Skript geschrieben, das einfach in ein Seiten-Template eingebunden werden kann und welches dort berechtigte Posts einfach als Tabelle ausgibt.

Warum ein Skript?

Die Einreichung erfolgt aktuell via Excel-Tabelle. Ein schneller Weg, diese zu befüllen, ist die Ausgabe einer HTML-Tabelle, die man einfach via Copy-&-Paste einfügen kann.

Anforderungen beachten!

Um die Ausschüttung zu erhalten, müssen einige Anforderungen erfüllt sein (siehe entsprechendes PDF), insbesondere 60.000 Anschläge im Jahr, wobei jeder Artikel mindestens 2.500 Anschläge aufweisen muss (für lyrische Texte gelten 1.500, ich wende in meinem Skript aber die 2.500er-Regel an).

Das PHP-Skript

Folgendes einfaches Skript kann man z.B. in WordPress in einer eigens angelegten Seite im PHP-Template unterbringen – ggf. bei Sichtbarkeit auf »Privat« stellen (falls jemand ein Plugin daraus machen möchte, jederzeit gerne!). Zunächst das Skript, danach die Erklärung im Detail (Disclaimer: Erstellt nach bestem Wissen und Gewissen, keine Garantie für Richtig- bzw. Vollständigkeit):

<?php
function replace_for_count($text) {
$text = str_replace('--', '–', $text);
return $text;
}
for ($year = 2020; $year <= date("Y"); $year++) { $args = array ( 'post_type' => 'post',
'nopaging' => true,
'posts_per_page' => '10000',
'order' => 'DESC',
'orderby' => 'post_date',
'year' => '' . $year . '',
'status' => 'publish'
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
$postLength=iconv_strlen(
html_entity_decode(
strip_shortcodes(
wp_strip_all_tags(
replace_for_count(
$post->post_title.$post->post_content
), true)
)
)
);
if ($postLength >= 2500 ) {
$postTable.="<tr style=\"border-bottom:0;\"><td>" .
replace_for_count($post->post_title) .
"</td><td><a href=\"" .
get_permalink($post->ID) . "\">" .
get_permalink($post->ID) .
"</a></td><td>" .
date( "d.m.Y" , strtotime($post->post_date) ) .
"</td><td>" .
$postLength . "</td></tr>";
} // if
} // while
} // if
} // for
echo "<table>" . $postTable . "</table>";
?>

Das macht das Skript

Zunächst habe ich eine kleine Funktion deklariert, die ggf. Zeichen ersetzt. In meinem Fall z.B. das doppelte Minus, aus dem bei mir bei der Ausgabe ein typografisch korrekter Gedankenstrich (Halbgeviertstrich) gemacht wird und nur als ein Anschlag zählen soll. Man kann dort bei Bedarf weitere Zeichen ersetzen.

Dann folgt die for-Schleife, die ab dem Jahr 2020 (Posts sind nur drei Jahre rückwirkend meldefähig) alle Posts durchgeht.

Dafür baue ich ein eigens WordPress-Query, das sich alle Posts für das entsprechende Jahr holt. Ist das erledigt wird in der folgenden while-Schleife jeder Post auf die Mindestlänge von 2.500 Zeichen geprüft. Ist die Länge erfüllt wird ein String (hier $postTable) um eine HTML-Tabellenzeile erweitert, die dem aktuellen Format der Excel-Beitragsliste entspricht. Am Ende wird die Tabelle ausgegeben.

Die Zeichenberechnung im Detail

Wichtig ist in meinen Augen die korrekte Berechnung der Postlänge, denn hier hatte ich in der Vergangenheit mit WordPress so meine Probleme. So lieferte bei mir ein simples strlen(get_the_title() . get_the_content()); komplett andere Werte, die oftmals (komischerweise nicht immer) weit unter der tatsächlichen Zeichenanzahl lagen (falls wer weiß warum, freue ich mich über einen Tipp in den Kommentaren).

Daher gehe ich kurz die genaue Reihenfolge der Funktionsaufrufe durch. Ich habe bei mir stichprobenartig mit einer Zählung des Strings in Apple Pages vergleichen und diese stimmten immer exakt überein – über Verbesserungsvorschläge freue ich mich natürlich trotzdem:

Von innen nach außen:

Ich gehe bei der Berechnung relativ konservativ vor, da ich Absätze und auch das Datum nicht als Anschläge zähle – falls hier wer mehr weiß oder schon diesbezügliche Melde-Erfahrung hat, hinterlasst gern einen Kommentar.

Eure Meinung

Apropos Kommentar hinterlassen: Ihr habt Fragen, Anmerkungen oder Verbesserungen? Darüber freue ich mich wie immer in den Kommentaren!


Neueste Artikel

Schlagwörter

· · ·


Teilen & Favorisieren

Twitter (0 & 2) · Mastodon (0 & 0) · Facebook (0 & 0)

Kommentieren

Am liebsten hier, gerne aber auch auf Twitter, Mastodon und Facebook. Ich freue mich über jeden Kommentar (Guidelines) & antworte immer (meist < 24h), HTML erlaubt.