Filtr dnia: style_loader_src – czyli zawsze* polskie znaki

zażółć gęślą jaźń

Jak bumerang wraca temat polskich znaków w Google Fonts i tego że ich nie widać.

Gwiazdka w tytule oznacza pewne założenie. Otóż tym założeniem jest to, że dany krój pisma posiada polskie znaki diakrytyczne.

Jak dany krój nie posiada, to i tak nic nie pomoże.

Aby czcionka mogła wyświetlać musi być załadowany odpowiedni zestaw znaków, ten zestaw dla Polski nazywa się latin-ext.
Czytaj dalej Filtr dnia: style_loader_src – czyli zawsze* polskie znaki

WordPress: dodaj nofollow do wszystkich linków w treści

Drobny kawałek kodu, który nadaje wszystkim linkom w artykułach atrybut nofollow.

add_filter( 'the_content', 'add_no_follow' );
function add_no_follow($content)
{
    if ( preg_match_all( '/<a[^>]+>/', $content, $matches ) ) {
        foreach ( $matches[0] as $old ) {
            $new = preg_replace( '/ rel="[^"]+"/', '', $old );
            $new = preg_replace( '/>/', ' rel="nofollow">', $new );
            $re = sprintf('|%s|', preg_replace( '/\|/', '\\|', $old ) );
            $content = preg_replace( $re, $new, $content );
        }
    }
    return $content;
}

pobierz plik: iworks-nofollow.php

Jak użyć podany kod?

Masz 3 rozwiązania:

  1. wrzuć załączony plik do folderu wp-content/plugins, a potem włącz wtyczkę
  2. wrzuć załączony plik do folderu wp-content/mu-plugins
  3. dołącz kod do pliku functions.php aktualnie używanego motywu

WordPress: Cykliczne pobieranie opcji

Czasem, wyświetlając serwis, należy aktualizować coś na stronie, ale bez przeładowywania. Standardowym przykładem może być liczba osób, aktualnie przeglądających witrynę.

WordPress posiada wbudowaną obsługę zapytań asynchronicznych (AJAX), którą można wykorzystać w tym celu. Całość wykorzystuje dwie akcje:

  • wp_ajax_nopriv_{nazawa} dla użytkowników niezalogowanych
  • wp_ajax_{nazawa} dla tych zalogowanych.

Częstym błędem jest umieszczenie tylko jednej z tych akcji. Czytaj dalej WordPress: Cykliczne pobieranie opcji

Jak w WordPressie przywrócić odnośniki?

Od wersji 3.5 nie widać w menu administratora strony do zarządzania odnośnikami, o czym pisałem już kiedyś: Rezygnacja z Odnośników w WordPress 3.5.

Jest bardzo prosta droga, do tego, żeby nadal zarządzać odnośnikami:

add_filter( 'pre_option_link_manager_enabled', '__return_true' );

Powyższą linijkę wystarczy dodać do pliku functions.php używanego motywu.

Przywracanie usuniętego administratora w WordPressie

Dość często spotykam pytanie typu:

Usunąłem konto administratora, jak je przywrócić?

Bardzo skutecznym i dość prostym rozwiązaniem jest stworzenie malutkiego pliku, do którego zapukamy przez przeglądarkę:

require 'wp-load.php';
$user_id = wp_create_user( 'marcin', '123456', 'exampe@domain.com' );
$wp_user_object = new WP_User( $user_id );
$wp_user_object->remove_role( 'subscriber' );
$wp_user_object->add_role( 'administrator' );

Wystarczy dodać plik (jest załączony na dole wpisu) do głównego katalogu serwisu i wybrać go w przeglądarce. W funkcji wp_create_user() należy wprowadzić swoje dane.

Po uruchomieniu zostanie założony użytkownik „marcin” z hasłem „123456” i wybranym adresem email.

Jeżeli mamy już użytkownika w bazie, a nie ma on uprawnień, to musimy pobrać identyfikator użytkownika za pomocą funkcji username_exists() Czytaj dalej Przywracanie usuniętego administratora w WordPressie

Domyślne linkowanie plików galerii w WordPress

Bardzo krótko i bardzo szybko. Kod powoduje, że galerie linkują do pliku graficznego, a nie do strony załącznika. Jest odpowiedzią na pytanie zadane na twarzoksiążce.

class iWorks_Default_Gallery_Link
{
    public function __construct()
    {
        add_filter( 'the_content', array( &$this, 'the_content' ), 1 );
    }
 
    public function the_content( $content )
    {
        return preg_replace( '/(\[ gallery[^\]]*)\]/', "$1 link=\"file\"]", $content );
    }
 
}
new iWorks_Default_Gallery_Link();

Uwaga w kodzie na stronie jest błąd w preg_replace, bo w tym miejscu pojawiała się galeria :D Jeżeli kopiujesz powyższy kod, usuń spację między [ a słowem gallery.

pobierz plik: iworks-gallery-default-file.php-.zip

Jak użyć podany kod?

Masz 3 rozwiązania:

  1. wrzuć załączony plik do folderu wp-content/plugins, a potem włącz wtyczkę
  2. wrzuć załączony plik do folderu wp-content/mu-plugins
  3. dołącz kod do pliku functions.php aktualnie używanego motywu

Jak sierotkami potraktować własne pola?

Tytułowe Sierotki, to maleńka wtyczka do WordPressa, która pozwala na zachowanie polskich zasad interpunkcji i zapobiega zostawiania na końcu linii znaków, które tam nie powinny być zostawiane, takich jak np. spójniki. Więcej o samej wtyczce można przeczytać tutaj: Sierotki – wtyczka do wordpressa.

Grzegorz zadał ciekawe pytanie:

Witam, pytałem kiedyś jak używać wtyczki z custom fields. Funkcja iworks_orphan() działała przed wersją 2.0. Teraz dostaję błąd, że taka metoda nie istnieje…

Grzegorz ma całkowitą rację. Taka funkcja przestała jakiś czas temu istnieć, a cała wtyczka została zrefaktorowana do klasy, a całe wywołanie do anonimowej instancji rzeczonej klasy. Czytaj dalej Jak sierotkami potraktować własne pola?

WordPress: omiń 3 wpisy na stronie głównej

Na forum WordPressa mateoo88 zapytał(a):

Potrzebuję tak przerobić kod odpowiedzialny za wyświetlanie wpisów aby wyświetlały mi się one np od 4 (aby 4 wpis był wyświetlany jako pierwszy a 1,2 i 3 wpis był ignorowany).

I moja pierwsza myśl była następująca:

add_filter( 'posts_request', 'a' );
 
function a( $query )
{
    if ( is_home() ) {
        if ( preg_match( '/LIMIT (\d+), (\d+)/', $query, $matches ) ) {
            $offset = 3;
            $target = sprintf(
                'LIMIT %d, %d',
                $matches[1] + $offset,
                $matches[2] + $offset
            );
            $query = preg_replace( '/LIMIT \d+, \d+/', $target, $query );
        }
    }
    return $query;
}

Co oczywiście zadziała, ale nie jest to rozwiązanie eleganckie i pół dnia męczyło mnie, że powinno się to zrobić inaczej, jakoś tak bardziej „poprawnie”.

Po przejrzeniu w codex dostępnych filtrów, uznałem że dużo lepsze jest skorzystanie z filtra pre_get_posts, co dało efekt w postaci takiego kodu:

add_filter( 'pre_get_posts', 'iworks_skip_3_posts' );
 
function iworks_skip_3_posts( $query )
{
    if ( is_home() ) {
        $query->set( 'offset', 3 );
    }
    return $query;
}

Moim zdaniem, takie rozwiązanie jest zdecydowanie bardziej eleganckie.

Standardowo kod do pobrania:

pobierz plik: iworks_skip_3_posts.php.zip

Jak użyć podany kod?

Masz 3 rozwiązania:

  1. wrzuć załączony plik do folderu wp-content/plugins, a potem włącz wtyczkę
  2. wrzuć załączony plik do folderu wp-content/mu-plugins
  3. dołącz kod do pliku functions.php aktualnie używanego motywu