Kurs "WordPress: Pierwsze kroki" (bezpłatna lekcja)

Pomysły na wpisy pojawiają się z różnych stron i w różnych miejscach. Tym razem zapytała mnie „podchwytliwie” kobieta ile to już wyrazów (i/lub znaków) łącznie napisałem we wszystkich wpisach na Webinsider.pl (a jest tego trochę). Przyznam, że jakoś do tej pory nawet nie myślałem o tym, że jest mi do czegokolwiek taka informacja potrzebna, ale skoro kobieta pyta… To ogólnie policzymy „to i owo” w WordPressie (na wypadek jakby i Wasza kobieta zadała kiedyś Wam takie pytanie ;-)).

Liczymy wpisy w WordPressie

Zanim przejdziemy do liczenia globalnego znaków i wyrazów we wszystkich postach, na początek rozgrzewka, czyli policzymy posty (wpisy) w naszym WordPressie. Wiem, że taka informacja jest dostępna w panelu zarządzania, ale być może kiedyś zapragniecie podzielić się z nią również z osobami niemającymi dostępu do tego panelu.

Nie będę rozbijał tego na poszczególne statusy, bo od razu chyba będzie wiadomo który element (zapytania/zmienna) odpowiada za wpisy o określonym statusie:

$wp_count_posts = wp_count_posts();

$wp_count_posts_publish = $wp_count_posts->publish;
$wp_count_posts_pending = $wp_count_posts->pending;
$wp_count_posts_future = $wp_count_posts->future;
$wp_count_posts_private = $wp_count_posts->private;
$wp_count_posts_draft = $wp_count_posts->draft;
$wp_count_posts_trash = $wp_count_posts->trash;

echo 'Opublikowane: ' . $wp_count_posts_publish . '<br />Oczekujące: ' . $wp_count_posts_pending . '<br />Zaplanowane: ' . $wp_count_posts_future . '<br />Prywatne: ' . $wp_count_posts_private . '<br />Szkice: ' . $wp_count_posts_draft . '<br />Kosz: ' .  $wp_count_posts_trash;

Możemy też policzyć ilość wpisów  w wybranej kategorii, w tym celu korzystamy z kodu:

echo get_category( 'ID_kategorii' )->category_count;

Liczymy komentarze w WordPressie

Skoro policzyliśmy wpisy, to może warto policzyć komentarze, zwłaszcza że cała procedura wygląda dość podobnie:

$wp_count_comments = wp_count_comments();

$wp_count_comments_approved = $wp_count_comments->approved;
$wp_count_comments_moderated = $wp_count_comments->moderated;
$wp_count_comments_spam = $wp_count_comments->spam;
$wp_count_comments_trash = $wp_count_comments->trash;

echo 'Zatwierdzone: ' . $wp_count_comments_approved . '<br />Oczekujące: ' . $wp_count_comments_moderated . '<br />SPAM: ' . $wp_count_comments_spam . '<br />Kosz: ' . $wp_count_comments_trash;

Liczymy ile wyrazów i znaków jest we wpisie w WordPressie

Rozgrzewka za nami, więc możemy przystąpić do liczenia wyrazów i znaków. Na początek w danym wpisie (można zastosować np. obok informacji o dacie ostatniej aktualizacji wpisu).

Pamiętajcie, że jest to liczenie automatyczne i orientacyjne, które opiera się na analizie „zawartości wpisu” (post content) i choć będziemy usuwać „dodatkowe znaki/znaczniki” (strip_tags) to zawsze coś może się prześliznąć.

Liczymy wyrazy:

$wp_post_content_words = str_word_count( strip_tags( get_post_field( 'post_content', get_the_ID() ) ) );
echo $wp_post_content_words;

Liczymy znaki:

$wp_post_content_characters = strlen( strip_tags( get_post_field( 'post_content', get_the_ID() ) ) );
echo $wp_post_content_characters;

I zestawienie zbiorcze:

$wp_post_content_words = str_word_count( strip_tags( get_post_field( 'post_content', get_the_ID() ) ) );
$wp_post_content_characters = strlen( strip_tags( get_post_field( 'post_content', get_the_ID() ) ) );

echo 'Wyrazy: ' . $wp_post_content_words . ', znaki: ' . $wp_post_content_characters;

Liczymy ile wyrazów i znaków jest we wszystkich wpisach w WordPressie

W tym momencie możemy już chyba zabrać się za liczenie znaków i wyrazów we wszystkich wpisach – pamiętajcie, że w przypadku bardziej „bogatych w treść” stron może to chwile zająć i zmęczyć serwer, stąd raczej potraktujcie to jako ciekawostkę, np. do zaimponowania dziewczynie Waszą płodnością (jeśli chodzi o pisanie ;-)), niż jako stały element motywu/strony.

Klasycznie zaczynamy od poleczenia wyrazów:

$wp_all_posts_content_count_words = 0;

$posts = get_posts( array(
    'numberposts' => -1,
    'post_type' => 'post',
    'post_status' => 'all'
) );

foreach( $posts as $post ) {
    $wp_all_posts_content_count_words += str_word_count( strip_tags( get_post_field( 'post_content', get_the_ID() ) ) );
}

echo $wp_all_posts_content_count_words;

Następnie liczymy znaki:

$wp_all_posts_content_count_characters = 0;

$posts = get_posts( array(
    'numberposts' => -1,
    'post_type' => 'post',
    'post_status' => 'all'
) );

foreach( $posts as $post ) {
    $wp_all_posts_content_count_characters += strlen( strip_tags( get_post_field( 'post_content', get_the_ID() ) ) );
}

echo $wp_all_posts_content_count_characters;

I na koniec wersja z liczeniem wyrazów i znaków, a do tego średnia długość wyrazu (ach ta magia statystyk):

$wp_all_posts_content_count_words = 0;
$wp_all_posts_content_count_characters = 0;

$posts = get_posts( array(
    'numberposts' => -1,
    'post_type' => 'post',
    'post_status' => 'all'
) );

foreach( $posts as $post ) {
    $wp_all_posts_content_count_words += str_word_count( strip_tags( get_post_field( 'post_content', get_the_ID() ) ) );
    $wp_all_posts_content_count_characters += strlen( strip_tags( get_post_field( 'post_content', get_the_ID() ) ) );
}

$wp_all_posts_content_count_average = $wp_all_posts_content_count_characters / $wp_all_posts_content_count_words;
$wp_all_posts_content_count_average = round( $wp_all_posts_content_count_average, 2 );

echo 'Wyrazy: ' . $wp_all_posts_content_count_words . ', znaki: ' . $wp_all_posts_content_count_characters . ' średnia: ' . $wp_all_posts_content_count_average;
Wprowadzając tego typu rozwiązania na produkcji, warto pomyśleć o odpowiednich mechanizmach keszujących, by nie obciążać niepotrzebnie serwera, przy każdorazowym generowaniu danych. Można też skorzystać z Transients API dostępnego w WordPressie.

Pamiętaj, to jest PHP

Oczywiście wszystkie przedstawione przykłady do kod PHP, więc nie zapomnijcie w razie konieczności „ubrać” ich w odpowiednie znaczniki:

<?php

[TU WSTAW KOD]

?>

Niby rzecz oczywista, ale potem pojawiają się pytania/komentarze, że zamiast wyniku pojawia się na stronie kod… ;-)

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Tworzysz stronę internetową i potrzebujesz pomocy?
Patryk
Kurs "WordPress: Pierwsze kroki" (na dobry początek)