WordPress remove filter with anonymous function / object

PHP 5.3 introduced anonymous functions and those can passed as an argument to WordPress add_filter function

add_filter( 'the_content', function( $content ){ 
	return trim( $content ); 
}, 10 );

This is super helpful as we don’t have to create new functions for such simple filtering as trimming of the content is. Plus this approach gives us an option to add custom arguments/parameters to a WordPress filter (checkout my another article on this topic).

A problem might arise when we need to remove such filter. How do we do that? WordPress is storing all filters in a global associative array. And does it store with unique filter_id generated by a _wp_filter_build_unique_id function.

This function is called from inside of add_filter and remove_filter function and it’s output stay constant for same input ( tag, function, priority ). So we can take advantage of this function and create our remove_filter_by_unique_id function. It’s derived from original remove_filter function, just with one line left (commented out in this example):

function remove_filter_by_unique_id( $tag, $function_to_remove, $priority = 10 ) {
	//$function_to_remove = _wp_filter_build_unique_id($tag, $function_to_remove, $priority);
	$r = isset($GLOBALS['wp_filter'][$tag][$priority][$function_to_remove]);
	if ( true === $r) {
		unset($GLOBALS['wp_filter'][$tag][$priority][$function_to_remove]);
		if ( empty($GLOBALS['wp_filter'][$tag][$priority]) ){
			unset($GLOBALS['wp_filter'][$tag][$priority]);
		}
		unset($GLOBALS['merged_filters'][$tag]);
	}	
	return $r;
}

We can use that function in this way:

$filter_id = _wp_filter_build_unique_id( 'the_content', function( $content ){
	return trim( $content );
}, 10  );
add_filter( 'the_content', function( $content ){
	return trim( $content );
}, 10 );
the_content();
remove_filter_by_unique_id( 'the_content', $filter_id, 10 );

But wait, we have still have to copy the anonymous function itself twice. This is not good. Let’s create our own add_filter function returning unique_filter_id for us. Again, simple, it’s just about updating a single line:

function add_annonymous_function_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
	global $wp_filter, $merged_filters;
	$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
	$wp_filter[$tag][$priority][$idx] = array('function' => $function_to_add, 'accepted_args' => $accepted_args);
	unset( $merged_filters[ $tag ] );
	//return true; -- we've replaced this line by the following one
	return $idx;
}

So the final usage will look like this:

$filter_id = add_annonymous_function_filter( 'the_content', function( $content ){
	return trim( $content );
}, 10 );
the_content();
remove_filter_by_unique_id( 'the_content', $filter_id, 10 );

This example is really simple, we could use get_the_content() instead of the_content() function and trim the output just before echoing it, but keep in mind, that this is just an example of anonymous function in WordPress filters.

 

Úprava more linku – odkazu na pokračování článku (read-more)

Pokračování článkuVe WordPressu se úvod článku (perex) odděluje od jeho pokračování značkou <!–more–>.

WordPress pak automaticky na toto místo vloží odkaz, nejčastěji česky přeložený jako „pokračovat ve čtení“, „číst celý článek“, „číst dál“, „přečíst celý článek“ apod.

Toto počeštění můžete provést sami, stejně jako úpravy vzhledu tohoto odkazu a chování při rozkliknutí článku. Pokud chcete, aby se čtenář dostal na celý článek od začátku a ne na pokračování, pomůže vám plugin Custom More Link Complete.

Úpravy samotného odkazu ve zdrojovém kódu

Upravit odkaz na pokračování článku je možné v šablonách motivu vzhledu, tedy všude tam, kde se tento odkaz nachází.

<?php the_content('Pokračuj ve čtení &raquo;'); ?>

Zde můžete provést pevné počeštění ve své šabloně, kterou nehodláte nechávat aktualizovat někým jiným (pokud to chcete dělat, zkuste Child Themes.

Úpravy vzhledu odkazu (style.css)

More link má WordPressem přiřazenou třídu more-link. Pokud ji ve svém stylopisu (souboru style.css) nemáte, můžete ji doplnit:

Příklad:

.more-link {
display: block;
float: right;
margin: 0 10px 0 0;
text-decoration: underline;
color: #dd0a0a;
font-size: 0.9em;
font-weight: normal;
}

Změna obsahu more linku s pluginem

Pokud chcete upravit obsah odkazu, můžete ho přes administraci editovat pomocí pluginu Custom More Link Complete.

Po instalaci a aktivaci je konfigurace v sekci Nastavení, kde najdete kód odkazu.

<a href="%permalink%" title="%linktext% &laquo;%title%&raquo;">
%linktext% &laquo;%title%&raquo;
</a>

Odkaz je poskládán z těchto značek:

  • %permalink% – trvalý odkaz na celý článek
  • %anchor% – odkaz na kotvu v článku (pokud chcete čtenáře posouvat za perex)
  • %class% – výchozí třída stylu (viz výše)
  • %linktext% – text odkazu nastavený v souboru šablony (viz výše, můžete samozřejmě upravit zde v pluginu podle svého)
  • %title% – název článku

Jednotlivé značky nemusíte použít a doplnit vlastním textem dle libosti.

Další nastavení pluginu

Custom More Link Complete - další nastavení

Custom More Link Complete – další nastavení

Pomocí Custom More Link Complete lze nastavit limit délky pro titulek článku (značka %title%). V odkazu se tedy nemusí opakovat celý nadpis, můžete použít jeho část a přidat několik teček.

WordPress má dva typy zobrazení perexu článků a kromě funkce content můžete používat i funkci excerpt.

Tedy místo

<?php the_content('Pokračuj ve čtení &raquo;'); ?>

toto:

<?php the_excerpt(); ?>

Excerpt zobrazuje ve výchozím nastavení prvních 55 slov článku a odkaz na pokračování. Poslední volbou v nastavení pluginu ovlivníte, jestli bude nastavení more linku použito i na tento odkaz u funkce excerpt.

Více o pluginu najdete na WordPress.org – Custom More Link Complete

WordPress plugin: odesílání kontaktních formulářů do databáze

MySQL logoExistují pluginy, které odesílají vyplněné kontaktní a jiné formuláře (například Contact Form 7) z webových stránek na zadanou e-mailovou adresu.

Plugin Contact Form DB umí informace z formulářů uložit do databáze WordPressu a všechna data zobrazit v administraci nebo dokonce na webu.

Hodí se to třeba v případě, že potřebujete na databázi napojit ještě jiný systém a v něm například zpracovávat požadavky zákazníků, objednávky apod. Může ale stejně dobře posloužit i jako záloha a archiv zpráv odeslaných z webu.

Plugin Contact Form DB umí ukládat data z formulářů odeslaných pluginy:

  • JetPack Contact Form plugin
  • Contact Form 7 (CF7) plugin
  • Fast Secure Contact Form (FSCF) plugin

Contact Form DBV administraci se po instalaci a aktivaci pluginu objeví ovládání samostatně na panelu vlevo.

Nastavit se pak dá například kdo má k informacím z formulářů přístup nebo z jakých formulářů se mají data do databáze ukládat.

Část nastavení Contact Form DB

Část nastavení Contact Form DB

Data uložená v databázi se dají zobrazit na webu

Data uložená v databázi se dají zpětně zobrazit na webu pomocí tzv zkratek. Některé jsou předdefinované, jiné si můžete vytvořit sami a pomocí shortcode ( [kod] ) je pak vložit do stránky nebo příspěvku.

Při vytvoření zkratky je možné určit, komu se obsah zobrazí.

Nastavení zobrazení na webu

Nastavení zobrazení na webu

Plugin Contact Form DB ke stažení

Stahujte klasicky přes instalaci pluginů v administraci WordPressu vyhledáním pluginu podle názvu.

Nebo na WordPress.org:
http://wordpress.org/plugins/contact-form-7-to-database-extension/

Pluginy použité na Netzinu (WordPress)

Logo WordPressNetzin běžel původně na Drupalu, 19.7.2011 jsem ho přesunul na WordPress a v tomto článku najdete seznam pluginů, které jsem zde použil.

I s popisem jejich funkce snad někomu poslouží jako inspirace pro vylepšení vlastního webu.

Protože se doba mění, aktualizováno 23.8.2013.

V úvodu představím nejprve pluginy, které jsou nyní neaktivní, ale mám je připravené jako dobré funkce pro budoucí vylepšení, které chci na Netzinu dělat. Druhá část o něco níže bude o pluginech, které jsou v tuto chvíli aktivní a poslední část o pluginech, které jsem během času shledal jako neužitečné.

Zatím neaktivní pluginy

Některé mám v záloze proto, že se mohou prostě v určitých případech hodit.

WP-DownloadManager

Měření počtu stažení souboru, vytvoření databáze souborů ke stažení a další vychytávky.

http://wordpress.org/extend/plugins/wp-downloadmanager/

Dean’s Permalinks Migration

V případě změny struktury trvalých odkazů přesměruje staré adresy na nové. Užitečná věc, kterou mám na WordPressu vždy, kdyby byla náhodou potřeba.

V adresáři puginů již nedostupný, v případě potřeby stahujte zde na Netzinu.

Ajax Newsletter

Automatické rozesílání nových článků na registrované e-mailové adresy. Uživatel se může kdykoli sám z odběru odhlásit.

http://code.google.com/p/wp-ajax-newsletter/

External Links

Označí externí odkazy. Použít lze takovou tu šipečku, jak je občas na některých webech vidět. Zatím nemám jasno v tom, jestli to čtenářům skutečně k něčemu je, tak jsem to zatím neaktivoval.

http://wordpress.org/extend/plugins/sem-external-links/

Aktivní pluginy na Netzinu

Aktivní pluginy zajišťují běžný chod a až na pár výjimek je považuji za opravdu potřebné.

All in One SEO Pack

Tento poměrně známý plugin přidává možnost zadat vlastní titulek a popis každému typu obsahu. Napsal jsem o něm zvlášť článek All in One SEO Pack – seo plugin pro WordPress, kde najdete další podrobnosti.

http://wordpress.org/extend/plugins/all-in-one-seo-pack/

Breadcrumb NavXT

Tento plugin zajišťuje drobečkovou navigaci. Lze u něj libovolně nastavit výchozí stránku i používané odkazy. Jak si můžete všimnout u tohoto článku nad jeho nadpisem, jste v rubrice WordPress na Netzin.cz.

http://wordpress.org/extend/plugins/breadcrumb-navxt/

Podrobný popis v článku Drobečková navigace na WordPressu – plugin Breadcrumb NavXT

Broken Link Checker

Upozorní na nefunkční odkazy. Týká se to těch interních včetně odkazů na obrázky a také odkazů externích. Plugin tak vždy upozorní na to, když cizí odkazovaná stránka přestane existovat, jedním klikem pak můžete odkaz odstranit nebo ho upravit a neposílat dál své čtenáře na místo, kde nic nenajdou.

http://wordpress.org/extend/plugins/broken-link-checker/

Contact Form 7

Kontaktní formulář s možností definovat vlastní pole a sestavit tak téměř cokoli (dotazník, upload souborů atd.)

http://wordpress.org/extend/plugins/contact-form-7/

Google XML Sitemaps

Generuje mapu webu pro roboty vyhledávačů. Určeno primárně pro Google, ale umí ji číst i Seznam.cz.

http://wordpress.org/extend/plugins/google-sitemap-generator/

Raven’s Antispam

Antispamové opatření založené na JavaScriptu. Uživatelé, kteří mají JavaScript vypnutý, musí opisovat captchu.

http://wordpress.org/extend/plugins/ravens-antispam/

WP-PostViews

Počítání zobrazení jednotlivých stránek a příspěvků. Základní statistika.

http://wordpress.org/extend/plugins/wp-postviews/

WordPress Database Backup

Zálohování databáze. Umí vyexportovat DB na požádání, nebo zálohu posílat v určeném intervalu na e-mailovou adresu.

http://austinmatzko.com/wordpress-plugins/wp-db-backup/

WP jQuery Lightbox

Nejlepší plugin pro efekt lightboxu.

http://wordpress.org/extend/plugins/wp-jquery-lightbox/

WP-PageNavi

Vylepšené stránkování výpisů příspěvků. Týká se hlavní stránky, ale také všech kategorií, štítků, archivů atd. Je to dobrá náhrada za typické odkazy „Novější příspěvky“ a „Starší příspěvky“.

http://wordpress.org/extend/plugins/wp-pagenavi/

Custom Post Type UI

Umožní snadno přes administraci vytvářet vlastní typy obsahu, tedy kromě příspěvků a stránek lze nastavit další s vlastní URL a taxonomií.

Podrobnější popis v článku Vlastní typy obsahu – plugin Custom Post Type UI

http://wordpress.org/plugins/custom-post-type-ui/

WP Super Cache

Dobře konfigurovatelný nástroj na zrychlení načítání webu pomocí ukládání statických stránek do mezipaměti.

http://wordpress.org/extend/plugins/wp-super-cache/

Alternativou je Quick Cache.

http://wordpress.org/plugins/quick-cache/

Subscribe To Comments

Umožní návštěvníkovi webu nechat si na svou e-mailovou adresu posílat nové komentáře u konkrétního příspěvku.

http://wordpress.org/extend/plugins/subscribe-to-comments/

Sideblog WordPress Plugin

Tento plugin jsem už popisoval. Jde o funkci vyřazení určitých rubrik z přehledu na hlavní straně, vyřazení příspěvků v konkrétních rubrikách z RSS výstupu a možnost zobrazit tyto příspěvky ve widgetu, případně vložením značky na libovolné místo přímo do kódu šablony.

http://wordpress.org/extend/plugins/sideblog/

Similar Posts

Zobrazuje související příspěvky podle zadaných kritérií. Podle štítků, rubrik, autora apod.

http://rmarsh.com/plugins/similar-posts/

K fungování tohoto pluginu je potřeba dále plugin Post-Plugin Library.

Revision Control

Některá vylepšení WordPressu jsou někdy a pro někoho spíš problémem. Jednou z těchto funkcí, kterou ve skutečnosti mnoho lidi nevyužije, je ukládání revizí jednotlivých příspěvků i stránek. Znamená to, že při každém uložení obsahu je tento uložen jako zvláštní verze do databáze. Pokud revize nepotřebujete a nechcete mít databázi zbytečně objemnou, nainstalujte si vhodný plugin.

Více informací v článku Zakažte WordPressu ukládat revize

Později vypnuté pluginy

Stealth Publish

Tajné publikování. Příspěvek není po zaškrtnutí políčka zobrazen na hlavní stránce a neobjeví se ani v RSS.

http://coffee2code.com/wp-plugins/stealth-publish/

My Category Order

Slouží k organizaci seznamu rubrik ve widgetu. Pokud je nechcete vypisovat ručně, ale potřebujete některé odstranit, jinak je seřadit apod., je tento plugin tím pravým.

http://wordpress.org/extend/plugins/my-category-order/

WP-PostRatings

Možnost nechat čtenáře ohodnotit článek. Použít lze typické hvězdičky, ale třeba i plus a mínus. Každému symbolu je možné nastavit bodovou hodnotu (i zápornou) a v administraci je poté k dispozici statistika hodnocení. Na web si můžete umístit i widget s nejlépe hodnocenými příspěvky.

http://wordpress.org/extend/plugins/wp-postratings/

Tuto funkci dnes ale dobře nahrazují tlačítka sociálních sítí.

Čeština pro WordPress 3.6

Čeština pro WordPress 3.6 by měla být během několika málo hodin dostupná přímo prostřednictvím automatické aktualizace (nebo si můžete ručně stáhnout kompletní instalační balíček). Lokalizace není sice zatím zcela kompletní, ale většinou chybí pouze dlouhé řetězce nápovědy, přehled novinek a administrace sítě webů. Běžný uživatel by se tak neměl s angličtinou v administraci vůbec setkat. Lokalizované […]

Změna a přesměrování trvalých odkazů na WordPressu

OdkazNa Netzinu jsem už podruhé během týdne měnil strukturu trvalých odkazů. Obecně platí, že URL adresy obsahu (jednotlivých webových stránek na webu, nebo v tomto případě trvalých odkazů příspěvků na WordPressu) by se neměly měnit vůbec.

Ale když je to opravdu potřeba, staré adresy by měly být přesměrovány na nové, a to pokud možno navždy.

Změna trvalých odkazů není s WordPressem nic složitého. Každý si je jistě nastavil hned po instalaci v rámci úvodní konfigurace.

Nastavení trvalých odkazů - WordPress

Nastavení trvalých odkazů – WordPress

Pokud je budete chtít někdy měnit, doporučuji plugin Dean’s Permalinks Migration. Nemusíte se o nic starat, stačí ho aktivovat předtím, než opětovně zasáhnete do nastavení a trvalé odkazy změníte. Dokud bude plugin aktivní, budou existovat i stará URL.

Tedy ještě jednou postup:

  1. Aktivujte plugin Dean’s Permalinks Migration
  2. Jděte do nastavení a změňte strukturu trvalých odkazů

Pokud budete s výsledkem nespokojeni, plugin má i jednoduché nastavení.

Nastavení Dean's Permalinks Migration

Nastavení Dean’s Permalinks Migration

Dean’s Permalinks Migration není k dispozici v adresáři na WordPress.org a zmizel i obsah webu autora. Stáhnout si ho můžete přímo z Netzinu:

Drobečková navigace na WordPressu – plugin Breadcrumb NavXT

Navigace na webuPsal jsem již o drobečkové navigaci z pohledu SEO (starý článek, který by potřeboval doplnit) a zmiňuje se o ní také předchozí článek Ideální URL příspěvků/článků na WordPressu.

Dnes například Google zobrazuje prvky z drobečkové navigace na stránce s výsledky hledání místo klasické URL stránky, takže její používání dostává další „SEO“ rozměr.

Zde na Netzinu vidíte drobečkovou navigaci nad nadpisy článků, třeba tohoto. Používám strukturu „Titulka – rubrika – název článku“.

Čtenář tak ví, ve které rubrice se nachází a může se klikem dostat na přehled všech souvisejících článků.

Google zobrazuje tuto drobečkovou navigaci místo URL článku.

Google - drobečková navigace v SERP

Google – drobečková navigace v SERP

Drobečkovou navigaci zajistíte na WordPressu pluginem Breadcrumb NavXT.

Lze u něj libovolně nastavit výchozí stránku, používané odkazy a další.

Breadcrumb NavXT - nastavení

Breadcrumb NavXT – nastavení

Zde stránka pluginu na WordPress.org.

Zobrazení drobečkové navigace na webu

(Doplněno na základě upozornění v komentáři.)
Pro zobrazení na webu vložte do souboru šablony, kde má být drobečková navigace zobrazena, následující kód:

<?php
if(function_exists(‚bcn_display‘))
{
bcn_display();
}
?>

Ideální URL příspěvků/článků na WordPressu

URLTento příspěvek se týká trvalých odkazů jednotlivých příspěvků (nebo chcete-li článků), tedy jejich URL adres.

Mohl by být o URL adresách obecně, ale WordPress má svá specifika, která je třeba brát v úvahu.

Jakou tedy zvolit strukturu trvalých odkazů?

Při volbě URL je dobré zamyslet se nad celkovou strukturu webu a nad SEO, tedy třeba nad tím, jakou adresu příspěvku vidí uživatel na stránce s výsledky vyhledávání.

Nutno říct, že WordPress sám o sobě mnoho pokročilých možností nedává. Třeba na Drupalu má uživatel možnost zvolit si strukturu odkazů dle typu obsahu už v základní instalaci, na WordPressu by si musel pomoci pluginy nebo dalším nastavením ve functions.php.

Tipy na pluginy

Pokud se rozhodnete pro vlastní typy obsahu se svou URL, doporučuji plugin Custom Post Type UI. Díky němu budete moci vytvářet kromě příspěvků ještě další typy obsahu, které budou mít svou URL, tedy třeba:

http://www.example.cz/clanek/nazev-clanku
http://www.example.cz/zprava/nazev-zpravy

Existují také pluginy, které umožní měnit URL u každého příspěvku zvlášť, nebo trvalé odkazy dále nastavovat nad možnosti WordPressu samotného. Jsou to třeba Custom Permalinks, Simple URLs nebo Permalink Editor.

Struktura webu a SEO

Struktura webu souvisí s použitelností a optimalizací pro uživatele (a tím pádem i pro vyhledávače), proto spojím téma do jednoho. Jak je naznačeno o něco výše, struktura webu se může řídit typem obsahu a samozřejmě také obsahem samotným, například:

http://www.example.cz/zvirata/psi
http://www.example.cz/zvirata/kocky

Znamená to, že na stránce zvirata by měl být nějaký rozcestník nebo něco obecně o zvířatech, další stránky jsou pak konkrétnější. U typů obsahu zpráva a článek, jak je na příkladu výše, by zase měla existovat i stránka s URL http://www.example.cz/clanek a http://www.example.cz/zprava, kde by mohly být například přehledy všech článků a zpráv.

Ideální je přidat k tomu drobečkovou navigaci, protože rámci SEO a samozřejmě použitelnosti s ní snadno vytvoříte takovou strukturu, která bude jasné definovat důležitost stránek v rámci webu.

Tedy stránka http://www.example.cz/zvirata je hlavní, jde o první úroveň zanoření z titulní stránky, stránky o psech a kočkách jsou o úroveň níž a společně odkazují na svou domovskou stránku o zvířatech obecně.

Čeština pro výchozí šablonu Twenty Thirteen 1.0

Po delší době včera vyšla nová verze pluginu Čeština pro WordPress 0.4 s kompletní lokalizací výchozí šablony Twenty Thirteen 1.0. Kromě samotného překladu obsahuje také upravený font Bitter s podporou českých znaků (díky M). Dále došlo k doplnění překladu fóra bbPress a některým dalším změnám. Pokud nechcete instalovat plugin, tak si můžete stáhnout pouze lokalizované soubory […]

Přesměrování feedu na feedburner

Existují dvě metody jak přesměrovat feed na feedburner:

1. Použití .htaccess

Tohle je vhodné pro single WordPress instalaci. Netestoval jsem to neb používám WordPress Multisite.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC]
RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
RewriteRule ^feed/?([_0-9a-z-] )?/?$ http://feeds.feedburner.com/catchinternet [R=302,NC,L]
</IfModule>

2. Pomocí function.php

Tahle varianta je lepší pro WordPress Multisite, neboť pomocí child theme máte možnost vložit přesměrování jen pro danou subdoménu.

//Redirect WordPress Feeds To FeedBurner
add_action('template_redirect', 'ci_rss_redirect');
function ci_rss_redirect() {
if ( is_feed() && !preg_match('/feedburner|feedvalidator/i', $_SERVER['HTTP_USER_AGENT'])){
header('Location: http://feeds.feedburner.com/bigdwp');
header('HTTP/1.1 302 Temporary Redirect');
}
}

 

 

The post Přesměrování feedu na feedburner appeared first on wpmax.cz.