Filtr dnia: widget_tag_cloud_args

Jednym z domyślnych widgetów, jakie oferuje WordPress jest taki, który pozwala wyświetlić chmurę tagów.

Domyślnie jest wyświetlane 45 tagów, co nie każdemu może odpowiadać.

Do zmiany liczby wyświetlanych tagów należy użyć filtra widget_tag_cloud_args tak, żeby zmienić argument number w funkcji wp_tag_cloud.

W najprostszej wersji możemy użyć takiego kodu:

class iworks_cloud_tag_limiter
{
    public function __construct()
    {
        add_filter('widget_tag_cloud_args', array($this, 'args'));
    }
    public function args($args)
    {
        $args['number'] = 20;
        return $args;
    }
}
new iworks_cloud_tag_limiter();

Ale takie rozwiązanie, które nie pozwala wybrać liczby tagów nie jest rozwiązaniem zbyt eleganckim.

Ustawianie liczby

Tutaj na pomoc rusza Option API, które pozwala dodać do wybranych stron dodatkowe opcje. Zdecydowałem się dorzucić możliwość ustawiania tagów w natywnej zakładce „Ustawienia -> Czytanie”.

class iworks_cloud_tag_limiter
{
    private $option_name = __CLASS__;
    public function __construct()
    {
        add_filter('widget_tag_cloud_args', array($this, 'args'));
        add_action('admin_init', array($this, 'admin_init'));
    }
    public function admin_init()
    {
        register_setting(
            'reading',
            $this->option_name,
            'intval'
        );
        add_settings_field(
            $this->option_name,
            __( 'Number of tags', __CLASS__ ),
            array( $this, 'setting_input'),
            'reading',
            'default'
        );
    }
    public function setting_input()
    {
        printf(
            '<input name="%s" type="number" value="%d" stat="1" step="1" class="small-text" /> %s',
            $this->option_name,
            $this->get_value(),
            __( 'Tags', __CLASS__)
        );
    }
    public function args($args)
    {
        $args['number'] = $this->get_value();
        return $args;
    }
    public static function init()
    {
        new iworks_cloud_tag_limiter();
    }
    private function get_value()
    {
        return get_option( $this->option_name, 45 );
    }
}
iworks_cloud_tag_limiter::init();

We wtyczce nie ma oczywiście tłumaczenia, ale to już zostawiam komuś chętnemu.

Kod do pobrania

Gotowy kod w formie wtyczki, możesz pobrać poniżej.

[zip href="http://iworks.pl/wp-content/uploads/2014/06/iworks-limit-posts-in-tag-cloud.php-.zip"]iworks_cloud_tag_limiter[/zip]

Poprzedni

WordUp Warszawa – kwiecień 2014

Następne

WordUp Warszawa #3 – widget

2 komentarze

  1. Paweł

    Potwierdzam działanie tej wtyczki, ja używam tagów prawie wszędzie można powiedzieć że pomaga nawet w SEO.

    Niestety miałem też taki przypadek że przez te tagi, Google pousuwało mi połowę wyników, pewnie uznało że strona z pojedynczym tagiem nie jest warta, albo jest spamem.

  2. Doskonały wpis. Od dawna szukałem skryptu do WP ograniczającego liczbę tagów do dosłownie kilku – kilkunastu. Wszystko po to, aby sterować właściwie przepływem pageranku na stronie naszego bloga

Oparte na WordPress & Theme by Anders Norén