Kategorie
filtr dnia Snippet WordPress

Filtr dnia: script_loader_src

Filtr bardzo podobny do style_loader_src, ale dla odmiany działający np. na pliki javascriptu.

Od dłuższego czasu denerwowało mnie to, że wszędzie gdzie zasysane jest jquery.js również pojawia się jquery-migrate.js, a ja go nie potrzebuję. Wiem jakich wtyczek używam, wiem że nie ma takich które potrzebują migrate.

Kategorie
filtr dnia Snippet WordPress

Filtr dnia: style_loader_src – czyli zawsze* polskie znaki

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.

Kategorie
Snippet WordPress

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
Kategorie
Snippet WordPress

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.

Kategorie
Snippet WordPress Wtyczka

Kontrola liczby wersji wpisów w WordPress 3.6

Nowa wersja WP, to też cała masa mniejszych lub większych zmian i dodatków. Jednym z nowych filtrów jest bardzo ciekawy filtr: wp_revisions_to_keep. Pozwala on na dokładne kontrolowanie liczby wersji wpisów.

W najprostszym ujęciu, starą definicję, która pozwalała na całkowite wyłączenie wersji:

Kategorie
Snippet WordPress

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.

Kategorie
Snippet WordPress

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()1 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()2

  1. wp_create_user() []
  2. username_exists() []
Kategorie
Snippet WordPress

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
Kategorie
Snippet WordPress

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.

Kategorie
Snippet WordPress

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