Tahák pro vývojáře WordPressu

php

Se vším tím žargonem a množstvím věcí, co si musí vývojář WordPressu zapamatovat, je snadné se splést nebo zapomenout. Připravili jsme jednoduchý tahák, který Vám v případě potřeby pomůže rychle se zorientovat. Základní soubory WordPressu style.css – soubor se styly index.php – soubor hlavní strany single.php – soubor stránky příspěvku archive.php – soubor archivu/rubriky searchform.php – soubor formuláře pro hledání search.php – soubor stránky hledání 404.php – soubor chybové stránky nenalezeno comments.php – soubor komentářů footer.php – soubor patičky header.php – soubor hlavičky sidebar.php – soubor sidebaru page.php – soubor stránky PHP v záhlaví <?php bloginfo(‚name‘); ?> – zobrazí název webu (Nastavení -> Obecné) <?php wp_title(); ?> – název stránky nebo příspěvku <?php bloginfo(‚stylesheet_uri‘); ?> – cesta ke style.css <?php bloginfo(‚pingback_uri‘); ?> – pingback URL pro stránku <?php bloginfo(‚template_uri‘); ?> – cesta k souborům šablony <?php bloginfo(‚version‘); ?> – verze WordPressu <?php bloginfo(‚atom_uri‘); ?> – Atom feed URL <?php bloginfo(‚rss2_uri‘); ?> – RSS2 URL <?php bloginfo(‚uri‘); ?> – URL stránky <?php bloginfo(‚html_type‘); ?> – verze HTML <?php bloginfo(‚charset‘); ?> – znaková sada stránky <?php bloginfo(‚language‘); ?> – jazyk WordPressu PHP v šabloně stránky <?php the_content(); ?> – obsah příspěvků <?php if(have_posts()): ?> – zkontroluje jestli jsou dostupné příspěvky <?php while(have_posts()): the_post(); ?> – pokud jsou dostupné, zobrazí příspěvky <?php endwhile; ?> – ukončuje PHP funkci while <?php endif; ?> – ukončuje PHP funkci if <?php get_header(); ?> –  vloží header.php <?php get_sidebar(); ?> – vloží sidebar.php <?php get_footer(); ?> – vloží footer.php <?php the_time(‚m-d-y‘); ?> –  datum ve formátu měsíc-den-rok <?php comments_popup_link(); ?> –  link do komentářů <?php the_title(); ?> –  titulek stránky nebo příspěvku <?php the_permalink(); ?> – URL odkaz do stránky nebo příspěvku <?php the_category(‚,‘); ?> – rubrika příspěvku <?php the_author(); ?> – autor příspěvku nebo stránky <?php the_ID(); ?> – ID příspěvku nebo stránky <?php edit_post_link(); ?> – odkaz do editace příspěvku <?php comments_template(); ?> – vloží comment.php <?php wp_list_pages(); ?> – seznam stránek <?php wp_list_cats(); ?> – seznam rubrik na stránce <?php next_post_link(‚%link‘); ?> – URL na další příspěvek <?php previous_post_link(‚%link‘); ?> – URL na předchozí příspěvek <?php get_calendar(); ?> – zabudovaný kalendář <?php wp_get_archives(); ?> – seznam archivu na stránce <?php posts_nav_link(); ?> – odkaz na další a předchozí příspěvky <?php bloginfo(‚description‘); ?> – popis webu Další užitečné /%postname%/ – vlastní odkaz <?php include(TEMPLATEPATH .’/x‘); ?> – zahrne jakýkoliv další soubor (x nahraďte koncovkou souboru) <?php the_search_query(); ?> – hodnota vyhledávacího formuláře <?php _e(‚zpráva‘); ?> – vypíše zprávu <?php wp_register(); ?> – zobrazí odkaz k registraci <?php wp_loginout(); ?> – zobrazí odkaz k přihlášení/odhlášení <!–next page–> – rozdělí obsah do stránek <!–more–> – značka pro pokračování textu <?php wp_meta(); ?> – meta pro administrátory <?php timer_stop(1); ?> – čas pro načtení stránky <?php echo get_num_queries(); ?> – dotazy k načtení stránky WordPress Smyčka (The Loop) Smyčka je PHP kód sloužící ve WordPressu k zobrazení příspěvků. Použitím Smyčky WordPress zpracuje všechny příspěvky, které mají být zobrazeny na dané stránce, a naformátuje je podle specifických kritérií uvnitř Smyčky. Jakýkoliv HTML nebo PHP kód co je ve Smyčce obsažen bude použit u každého příspěvku. <?php if ( have_posts() ) { while ( have_posts() ) { the_post(); // // Post Content here // } // end while } // end if ?>

Tip do kódu: přesměrování

HTML

Přesměrování je jednou ze základních potřeb při programování nějaké funkce. Ve WordPressu existuje jednoduchý příkaz wp_redirect( $location, $status );, pomocí kterého můžete nastavit přesměrování a stavový kód. Nyní si vše ukážeme a vysvětlíme na příkladu. if($email_odeslan == TRUE){ wp_redirect( home_url() ); exit; } Pokud je email odeslán, přesměruj na hlavní stranu. WordPress používá funkci home_url() pro vložení URL hlavní strany. Nicméně můžete zadat také absolutní adresu jako například wp_redirect( http://zdenekvojacek.com ); exit;, nebo zadat jinou stánku na svém webu wp_redirect( home_url() . ‚/podstranka‘ ); exit; (tečkou se spojují řetězce). Jestliže chcete chcete použít i status, tak by příkaz byl: wp_redirect( ‚http://zdenekvojacek.com‘, 301 ); exit;. Tento příkaz vás přesměruje na zadanou adresu a přidá stavový kód, který říká že došlo k trvalému přesunu. Seznam stavů najdete například na wikipedii.

Dva a půl nových pluginů pro WordPress

Čas letí jak voda a já už dva a půl roku nenapsal nic na svůj blog. Čas to změnit! V poslední době jsem totiž vydal dva nové pluginy pro WordPress, které potřebují trochu propagace, no a taky jsem aktualizoval svůj nejspíš nejpopulárnější plugin Zalomení.

Zalomení

Psali mi někteří uživatelé WordPressu, že jim nefunguje Zalomení, ale rádi by ho používali. Někteří mi dokonce dali admin přístup na své weby, tak jsem se vrtal v tom, co je špatně. Bohužel jsem nepřišel na to, proč u nich chyba vzniká, když na mnohých jiných webech vše běží v pořádku, ale… trošku jsem si více nastudoval API WordPressu a zjistil, že nedělám věci úplně optimálně.

A tak jsem se nakonec rozhodl svůj plugin úplně přepsat. Nezůstal kámen na kameni. Pro uživatele víceméně vše funguje tak jako dříve, tedy kromě pár nových možností nastavení, které jsem tam na žádosti uživatelů přidal. Ale celé nastavení včetně jeho ukládání je nyní řešeno přímo interními funkcemi WordPressu, čímž se odstranil problém popisovaný výše.

Vše si samozřejmě vyžádalo pár ještě drobnějších úprav, takže těch verzí pluginu vyšlo v posledních dvou měsících několik, teď už je snad vše ustáleno a běhá, tak jak má.

Note: There is a file embedded within this post, please visit this post to download the file.
Stránka pluginu na webu WordPressu

Gallery Slice

Na jiném webu často publikuji galerie obrázků, no a občas se jedná o fakt velké galerie (třeba přes 100 obrázků). Je samozřejmě velmi nepraktické na domovské stránce a ostatních archivních stránkách, abyste tam měli nějakou obří galerii a museli k dalšímu článku dlouho scrollovat. Chtělo by to nějaké zkrácení, něco jako preview galerie.

Samozřejmě nejsem první, kdo se s takovým problémem setkal. Jenže ani jedno z (typů) řešení, které se nabízely, mě nezaujal. Většinou je záležitost řešena tak, že se galerie stránkuje po X obrázcích. Uživatel si pak zobrazí první stránku, druhou stránku, třetí a tak dále. Můj dojem ale je, že návštěvník, pokud ho zaujalo preview, tak si nechce zobrazovat x dalších stránek, každou zvlášť. Když už ho to zaujalo, tak chce vidět celý zbytek.

Něco takového nabízely šablony twentyten a twentyeleven, které byly výchozí ve starších verzích WordPressu. Jenže ty jako preview ukázaly zase jen jeden jediný obrázek z galerie, nic víc, teda ještě počet, kolik je v galerii obrázků celkem. No a když mě žádné existující řešení nezaujalo, tak to byl samozřejmě impuls k tomu, vytvořit své vlastní.

A tak vznikl plugin Gallery Slice. Pokud si ho nahrajete do svého WordPressu, pak na homepagi a archivech budou galerie zkráceny (oříznuty) jen na několik prvních obrázků (výchozí hodnota je 9, ale můžete si to nastavit podle svého). No a pod takto zkrácenou galerií se nachází odkaz Celá galerie →, pomocí něhož se návštěvníkovi skrz Ajax dotáhne celý zbytek galerie, pokud ho chce vidět.

Note: There is a file embedded within this post, please visit this post to download the file.
Stránka pluginu na webu WordPressu

Rajce embed

Poslední z nových pluginů jsem vzal jako takové svoje programátorské cvičení, abych se zase něco dál naučil ohledně PHP a WordPressu. Impulz nicméně vznikl z toho, že na mém jiném webu uživatelé umisťovali odkazy na galerie a obrázky z populárního českého webu Rajče. No a mě napadlo, že by bylo hezké, kdyby se místo odkazů zobrazil přímo obrázek nebo galerie.

Takže jsem vytvořil plugin, který pomocí standardních postupů WordPressu umožňuje vložit do příspěvku obrázek nebo galerii z Rajčete. To znamená, že stačí jako samostatný odstavec uvést URL adresu na obrázek nebo galerii a návštěvníkovi se místo adresy objeví příslušný obsah — obrázek nebo galerie.

Galerie se vkládá jako nativní galerie WordPressu, používá stejnou HTML strukturu a stejné CSS třídy. To znamená, že by měla být vizuálně zobrazena stejným způsobem, jako tradiční galerie, nicméně trochu to záleží i na použité šabloně. No a aby bylo vše konzistentní a integrované, galerie vkládané tímto pluginem Rajce embed budou také na homepagi zkracovány pomocí pluginu Gallery Slice, pokud používáte oba dva.

Tento plugin bude užitečný převážně lidem, kteří mají omezené množství prostoru pro svou instalaci WordPressu, ale chtěli by publikovat větší množství fotografií, ty se jim přímo do WordPressu ovšem nevejdou. Fotky tedy nahrajte na Rajče a pomocí pluginu Rajce embed je zobrazte ve WordPressu.

Note: There is a file embedded within this post, please visit this post to download the file.
Stránka pluginu na webu WordPressu

A to je pro tuto chvíli vše. V následujících týdnech asi projdu své další starší pluginy a zaktualizuji je, podobně jak jsem to udělal se Zalomením.

Dva a půl nových pluginů pro WordPress

Čas letí jak voda a já už dva a půl roku nenapsal nic na svůj blog. Čas to změnit! V poslední době jsem totiž vydal dva nové pluginy pro WordPress, které potřebují trochu propagace, no a taky jsem aktualizoval svůj nejspíš nejpopulárnější plugin Zalomení.

Zalomení

Psali mi někteří uživatelé WordPressu, že jim nefunguje Zalomení, ale rádi by ho používali. Někteří mi dokonce dali admin přístup na své weby, tak jsem se vrtal v tom, co je špatně. Bohužel jsem nepřišel na to, proč u nich chyba vzniká, když na mnohých jiných webech vše běží v pořádku, ale… trošku jsem si více nastudoval API WordPressu a zjistil, že nedělám věci úplně optimálně.

A tak jsem se nakonec rozhodl svůj plugin úplně přepsat. Nezůstal kámen na kameni. Pro uživatele víceméně vše funguje tak jako dříve, tedy kromě pár nových možností nastavení, které jsem tam na žádosti uživatelů přidal. Ale celé nastavení včetně jeho ukládání je nyní řešeno přímo interními funkcemi WordPressu, čímž se odstranil problém popisovaný výše.

Vše si samozřejmě vyžádalo pár ještě drobnějších úprav, takže těch verzí pluginu vyšlo v posledních dvou měsících několik, teď už je snad vše ustáleno a běhá, tak jak má.

Note: There is a file embedded within this post, please visit this post to download the file.
Stránka pluginu na webu WordPressu

Gallery Slice

Na jiném webu často publikuji galerie obrázků, no a občas se jedná o fakt velké galerie (třeba přes 100 obrázků). Je samozřejmě velmi nepraktické na domovské stránce a ostatních archivních stránkách, abyste tam měli nějakou obří galerii a museli k dalšímu článku dlouho scrollovat. Chtělo by to nějaké zkrácení, něco jako preview galerie.

Samozřejmě nejsem první, kdo se s takovým problémem setkal. Jenže ani jedno z (typů) řešení, které se nabízely, mě nezaujal. Většinou je záležitost řešena tak, že se galerie stránkuje po X obrázcích. Uživatel si pak zobrazí první stránku, druhou stránku, třetí a tak dále. Můj dojem ale je, že návštěvník, pokud ho zaujalo preview, tak si nechce zobrazovat x dalších stránek, každou zvlášť. Když už ho to zaujalo, tak chce vidět celý zbytek.

Něco takového nabízely šablony twentyten a twentyeleven, které byly výchozí ve starších verzích WordPressu. Jenže ty jako preview ukázaly zase jen jeden jediný obrázek z galerie, nic víc, teda ještě počet, kolik je v galerii obrázků celkem. No a když mě žádné existující řešení nezaujalo, tak to byl samozřejmě impuls k tomu, vytvořit své vlastní.

A tak vznikl plugin Gallery Slice. Pokud si ho nahrajete do svého WordPressu, pak na homepagi a archivech budou galerie zkráceny (oříznuty) jen na několik prvních obrázků (výchozí hodnota je 9, ale můžete si to nastavit podle svého). No a pod takto zkrácenou galerií se nachází odkaz Celá galerie →, pomocí něhož se návštěvníkovi skrz Ajax dotáhne celý zbytek galerie, pokud ho chce vidět.

Note: There is a file embedded within this post, please visit this post to download the file.
Stránka pluginu na webu WordPressu

Rajce embed

Poslední z nových pluginů jsem vzal jako takové svoje programátorské cvičení, abych se zase něco dál naučil ohledně PHP a WordPressu. Impulz nicméně vznikl z toho, že na mém jiném webu uživatelé umisťovali odkazy na galerie a obrázky z populárního českého webu Rajče. No a mě napadlo, že by bylo hezké, kdyby se místo odkazů zobrazil přímo obrázek nebo galerie.

Takže jsem vytvořil plugin, který pomocí standardních postupů WordPressu umožňuje vložit do příspěvku obrázek nebo galerii z Rajčete. To znamená, že stačí jako samostatný odstavec uvést URL adresu na obrázek nebo galerii a návštěvníkovi se místo adresy objeví příslušný obsah — obrázek nebo galerie.

Galerie se vkládá jako nativní galerie WordPressu, používá stejnou HTML strukturu a stejné CSS třídy. To znamená, že by měla být vizuálně zobrazena stejným způsobem, jako tradiční galerie, nicméně trochu to záleží i na použité šabloně. No a aby bylo vše konzistentní a integrované, galerie vkládané tímto pluginem Rajce embed budou také na homepagi zkracovány pomocí pluginu Gallery Slice, pokud používáte oba dva.

Tento plugin bude užitečný převážně lidem, kteří mají omezené množství prostoru pro svou instalaci WordPressu, ale chtěli by publikovat větší množství fotografií, ty se jim přímo do WordPressu ovšem nevejdou. Fotky tedy nahrajte na Rajče a pomocí pluginu Rajce embed je zobrazte ve WordPressu.

Note: There is a file embedded within this post, please visit this post to download the file.
Stránka pluginu na webu WordPressu

A to je pro tuto chvíli vše. V následujících týdnech asi projdu své další starší pluginy a zaktualizuji je, podobně jak jsem to udělal se Zalomením.

SERIÁL „ZAČÍNÁME S PROGRAMOVÁNÍM“ – CSS 2. ČÁST

HTML

Představme si několik základních CSS vlastností. Kaskádové styly jsou soupisem příkazů pro popis způsobu zobrazení stránek napsaných v jazycích HTML, XHTML nebo XML. “Jazyk” CSS byl navržen standardizační organizací W3C. CSS obsahuje velké množství vlastností. V tomto článku si představíme pouze ty nejdůležitější CSS vlastnosti, seznam všech najdete na stránkách W3Cschools.com. Všechny uvedené CSS vlastnosti jsou užitečné při lehkém dostylování šablony WordPressu. Často se totiž stane, že potřebujete upravit nějaké odsazení, změnit velikost obrázku, písma apod. Background – pozadí background-color barva pozadí prvky background-color:yellow; background-image obrázek na pozadí Color – barvy barva textu color:#00f; Font písma font-size velikost písma font-size:20px; font-weight tloušťka písma font-weight:900; font-weight:100; font-family styl písma font-family: Georgia, Arial, sans-serif font-family: Courier New, Courier, monotype Text text decoration úprava textu text-decoration:underline; text-decoration:overline; text-decoration:line-through; text align zarovnání textu text-align:left; text-align:right; text-align:center; float zarovnání prvku, nikoliv textu float:left; float:right;   Display – způsoby zobrazení display block Prvek se zobrazí do bloku. Jedná se v podstatě o základní zobrazení. 1.display:block; 2.display:block; 3.display:block; display none Prvek se nezobrazí. 1.display:block; 2.display:none; 3.display:block; 2. prvek má display:none; display inline Prvky se zobrazí v řadě za sebou. 1.display:inline; 2.display:inline; 3.display:inline; Border – rámečky okolo prvků border-color přidá prvku rámeček určité barvy border-color:red; border-width přidá prvku rámeček určité tloušťky border-width:4px; border-style Přidá prvku rámeček určitého typu border-style:solid; border-style:dotted; border-style:dashed; border-style:bouble; Zkrácený zápis Ve většině případů se pro rámeček používá zkrácený zápis, který je kombinací všech tři. border: 5px dotted #f0f; Margin – vnější odsazení prvků margin-left vnější odsazení prvku z levé strany margin-left:20px; margin-right vnější odsazení prvku z pravé strany margin-right:20px; margin-top vnější odsazení prvku shora margin-top:10px; margin-bottom vnější odsazení prvku zdola margin-bottom:10px; Padding – vnitřní odsazení padding-left vnitřní odsazení prvku zleva      padding-left:20px; padding-right vnitřní odsazení prvku zprava padding-right:20px; padding-bottom vnitřní odsazení prvku zdola padding-bottom:20px; padding-top vnitřní odsazení prvku zhora padding-top:20px;

Přidání nového příspěvku programátorsky


/*
A function used to programmatically create a post in WordPress.
@returns -1 if the post was never created, -2 if a post with the same title exists, or the ID of the post if successful.
*/

function programmatically_create_post($user_id) {
	// Initialize the page ID to -1. This indicates no action has been taken.
	$post_id = -1;

	// Setup the title of the post
	$title = 'My New Post'

	// If the page doesn't already exist, then create it
	if( null == get_page_by_title($title)) {
		// Set the post ID so that we know the post was created successfully
		$new_post = array(
		'post_title' => $title,
		'post_name' => my-new-post,
		'post_content' => 'Lorem ipsum dolor sit amet...',
		'post_status' => 'publish',
		'post_date' => date('j.n.Y H:i:s'),
		'post_author' => $user_id,
		'post_type' => 'post',
		'post_category' => array(0),
		'comment_status'  => 'closed',
		'ping_status'   => 'closed',
		);
		$post_id = wp_insert_post($new_post);
	// Otherwise, we'll stop
	} else {
		// Arbitrarily use -2 to indicate that the page with the title already exists
		$post_id = -2;
	} // end if
} // end programmatically_create_post

Programmatically Create a Post in WordPress »
„How to Create a Post in WordPress Programmatically »“:How to Create a Post in WordPress Programmatically

To lze využít např. pro automatické vytvoření příspěvku z uživatelského profilu při jeho ukládání přes user_register hook


add_action('user_register','programmatically_create_post');

Jak přidat tlačítko do HTML editoru


// Add buttons to html editor
add_action('admin_print_footer_scripts','eg_quicktags');
function eg_quicktags() {
?>
<script type="text/javascript" charset="utf-8">
/* Adding Quicktag buttons to the editor WordPress ver. 3.3 and above
* - Button HTML ID (required)
* - Button display, value="" attribute (required)
* - Opening Tag (required)
* - Closing Tag (required)
* - Access key, accesskey="" attribute for the button (optional)
* - Title, title="" attribute (optional)
* - Priority/position on bar, 1-9 = first, 11-19 = second, 21-29 = third, etc. (optional)
*/
QTags.addButton( 'eg_paragraph', 'p', '<p>', '</p>', 'p' );
QTags.addButton( 'eg_pre', 'pre','<pre lang="php">', '</pre>', 'q' );
</script>
<?php
}

Manipulace s údaji v Contact Form 7 před a po odeslání

WordPress Contact Form 7 Hook Unofficial Developer Documentation and Examples »

Changing Form Data Before it is Saved »

Contact Form 7 – form submit change field value »

How to create a mail counter for Contact Form 7 »

Extending the Contact Form 7 Plugin »

[private]


### příklad použitý na http://u904.cz/mimoradna-nabidka-lifebook-a512/
### pocitadlo objednavek odeslanych z CF7

// Define the key to store in the database
define('CF7_COUNTER', 'cf7-counter');
define('CF7_LASTORD', 'cf7-lastord');
define('POCNAB', '200'); // startovni pocet kusu
 
### Create the shortcode which will read the value from db option
function cf7db_reader(){
	$val = get_option(CF7_COUNTER, POCNAB);  // kdyz neexistuje option v db, vrati startovni pocet
	return $val;
}
add_shortcode('CF7_show', 'cf7db_reader');


### Action performed BEFORE the mail is sent by CF7
function wpcf7_change_mail($form) {
	$formid = $form->id; // gets current form id
	if ($formid == '384') {
	  $wpcf7 = WPCF7_ContactForm::get_current(); // get current FORM instance
		$wpcf7data = WPCF7_Submission::get_instance(); // // get current SUBMISSION instance
		if ($wpcf7data) {
			$formData = $wpcf7data->get_posted_data();
		}
		// Reading a posted value in the form with PHP
		$poc = $formData['pocet']; // nacte hodnotu z prave odeslaneho formulare
		$val = get_option(CF7_COUNTER, POCNAB); // nacte aktualni hodnotu skladu, kdyz neexistuje option v db, vytvori a naplni ji startovnim poctem objednavku.

		// nahrada dat v mailu
		$mail = $wpcf7->prop('mail');
		
		if($poc > $val): // objednano vic kusu, nez je na sklade, nahradim REPLACER textem
			$mail['pocet'] = $val; // snizim objednany pocet
			// doplnim upozorneni do mailu
			// Find/replace the "special" tag as defined in your CF7 email body
    	$mail['body'] = str_replace('REPLACER', "Jelikož jste objednali větší počet (".$poc." ks), než bylo aktuálně k dispozici skladem (".$val." ks), bude objednaný počet snížen na dostupné množství.\n", $mail['body']);
		else: // odstrani REPLACER string
			$mail['body'] = str_replace('REPLACER', "", $mail['body']);
		endif;
	    
    // Save the email body
    $wpcf7->set_properties(array("mail" => $mail));
			
		// return current cf7 instance
    return $wpcf7;
	}
}
add_action('wpcf7_before_send_mail', 'wpcf7_change_mail');


### Action performed WHEN the mail is sent by CF7
function cf7_decrement_order_counter($form){
	$formid = $form->id; // gets current form id
	if ($formid == '384') {
	  // $wpcf7 = WPCF7_ContactForm::get_current(); // get current FORM instance
		$wpcf7data = WPCF7_Submission::get_instance(); // // get current SUBMISSION instance
		if ($wpcf7data) {
			$formData = $wpcf7data->get_posted_data();
		}
    $poc = $formData['pocet']; // nacte hodnotu z prave odeslaneho formulare
    $val = get_option(CF7_COUNTER, POCNAB) - $poc; // kdyz neexistuje option v db, vytvori a naplni ji startovnim poctem snizenym o odeslanou objednavku.
		update_option(CF7_COUNTER, $val); // Update the settings with the new count
		update_option(CF7_LASTORD, $poc); // Update the settings with the new count
	}
}
add_action('wpcf7_mail_sent', 'cf7_decrement_order_counter');


### zmena poctu objednanych kusu v databazi odeslanych formularu (Contact Form DB)
function change_cfdb_value($formData){
        $formName = 'A514';
        if ($formData && $formName == $formData->title) {
                $poc = $formData->posted_data['pocet'];
                $val = get_option(CF7_COUNTER, POCNAB);
                if($poc > $val): // objednano vic kusu, nez je na sklade
                        $formData->posted_data['dodavka'] = $val;
                else:
                        $formData->posted_data['dodavka'] = $poc;
                endif;
  }
  return $formData;
}
add_filter('cfdb_form_data', 'change_cfdb_value');


### Change content of Ordering Page
function formRemover($content) {
		if(!is_feed() && !is_admin() && is_page(381)) {
    	$val = get_option(CF7_COUNTER);
    	if($val == 0):
				$content = str_replace('<h3>Tak neváhejte!</h3>', '<h3>Prodej byl ukončen.</h3>', $content);
    	else:
				$content = str_replace('</ul>', '</ul><h3>Objednávkový formulář</h3><h3></h3>

Chyba: Kontaktní formulář nebyl nalezen.

', $content); endif; } return $content; } add_filter ('the_content', 'formRemover'); ### Change content of Thank You Page function orderAlert($content) { if(!is_feed() && !is_admin() && is_page(385)) { $val = get_option(CF7_COUNTER, POCNAB); $poc = get_option(CF7_LASTORD, 0); $roz = $poc-$val; if($val <= 0): $content = str_replace('REPLACER', '<h3>Díky za objednávku.</h3><p>Jelikož jste objednali <b>větší počet</b> kusů, než bylo aktuálně k dispozici skladem, byl Vámi objednaný počet <b>snížen</b>.</p><p>Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.</p>', $content); update_option(CF7_COUNTER, 0); // vynulovani pocitadla update_option(CF7_LASTORD, 0); // vynulovani pocitadla else: $content = str_replace('REPLACER', '<h3>Díky za objednávku.</h3><p>Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.</p>', $content); endif; } return $content; } add_filter ('the_content', 'orderAlert'); ### pridani odkazu na blog page k excerptum function excerpt_read_more_link($output) { global $post; return $output . '<a href="'. get_permalink($post->ID) . '"> Více »</a>'; } add_filter('the_excerpt', 'excerpt_read_more_link'); ############################# #### ve starších verzích CF7 ############################# // Define the key to store in the database define('CF7_COUNTER', 'cf7-counter'); define('CF7_LASTORD', 'cf7-lastord'); define('POCNAB', '260'); // startovni pocet kusu ### Create the shortcode which will read the value from db option function cf7db_reader(){ $val = get_option(CF7_COUNTER, POCNAB); // kdyz neexistuje option v db, vrati startovni pocet return $val; } add_shortcode('CF7_show', 'cf7db_reader'); ### Action performed BEFORE the mail is sent by CF7 function wpcf7_change_mail($formData) { $formName = 'A512'; if ($formData && $formName == $formData->title) { // Reading a posted value in the form with PHP $poc = $formData->posted_data['pocet']; // nacte hodnotu z prave odeslaneho formulare $val = get_option(CF7_COUNTER, POCNAB); // nacte aktualni hodnotu skladu, kdyz neexistuje option v db, vytvori a naplni ji startovnim poctem objednavku. $bod = $formData->mail['body']; if($poc > $val): // objednano vic kusu, nez je na sklade, nahradim REPLACER textem $formData->posted_data['pocet'] = $val; // snizim objednany pocet // doplnim upozorneni do mailu $bod = str_replace('REPLACER', "Jelikož jste objednali větší počet (".$poc." ks), než bylo aktuálně k dispozici skladem (".$val." ks), byl objednaný počet snížen na dostupné množství.\n", $bod); $formData->mail['body'] = $bod; else: // odstrani REPLACER string $bod = str_replace('REPLACER', '', $bod); $formData->mail['body'] = $bod; endif; } } add_action('wpcf7_before_send_mail', 'wpcf7_change_mail'); ### Action performed WHEN the mail is sent by CF7 function cf7_decrement_order_counter($formData){ $formName = 'A512'; if ($formData && $formName == $formData->title) { $poc = $formData->posted_data['pocet']; // nacte hodnotu z prave odeslaneho formulare $val = get_option(CF7_COUNTER, POCNAB) - $poc; // kdyz neexistuje option v db, vytvori a naplni ji startovnim poctem snizenym o odeslanou objednavku. update_option(CF7_COUNTER, $val); // Update the settings with the new count update_option(CF7_LASTORD, $poc); // Update the settings with the new count } } add_action('wpcf7_mail_sent', 'cf7_decrement_order_counter'); ### zmena poctu objednanych kusu v databazi odeslanych formularu (Contact Form DB) function change_cfdb_value($formData){ $formName = 'A512'; if ($formData && $formName == $formData->title) { $poc = $formData->posted_data['pocet']; $val = get_option(CF7_COUNTER, POCNAB); if($poc > $val): // objednano vic kusu, nez je na sklade $formData->posted_data['dodavka'] = $val; else: $formData->posted_data['dodavka'] = $poc; endif; } return $formData; } add_filter('cfdb_form_data', 'change_cfdb_value'); ### Change content of Ordering Page function formRemover($content) { if(!is_feed() && !is_admin() && is_page(60)) { $val = get_option(CF7_COUNTER); if($val == 0): $content = str_replace('<h3>Tak neváhejte!</h3>', '<h3>Prodej byl ukončen.</h3>', $content); else: $content = str_replace('</ul>', '</ul><h3>Objednávkový formulář</h3><h3></h3>

Chyba: Kontaktní formulář nebyl nalezen.

', $content); endif; } return $content; } add_filter ('the_content', 'formRemover'); ### Change content of Thank You Page function orderAlert($content) { if(!is_feed() && !is_admin() && is_page(72)) { $val = get_option(CF7_COUNTER, POCNAB); $poc = get_option(CF7_LASTORD, 0); $roz = $poc-$val; if($val <= 0): $content = str_replace('REPLACER', '<h3>Díky za objednávku.</h3><p>Jelikož jste objednali <b>větší počet</b> kusů, než bylo aktuálně k dispozici skladem, byl Vámi objednaný počet <b>snížen</b>.</p><p>Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.</p>', $content); update_option(CF7_COUNTER, 0); // vynulovani pocitadla update_option(CF7_LASTORD, 0); // vynulovani pocitadla else: $content = str_replace('REPLACER', '<h3>Díky za objednávku.</h3><p>Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.</p>', $content); endif; } return $content; } add_filter ('the_content', 'orderAlert');

[/private]

Ve verzi CF7 4 a vyšší se způsob přebírání dat z formuláře změnil:


/* WPCF7_ContactForm object no longer has a posted_data property. */
$posted_data = $contact_form->posted_data; // Tohle už nefunguje

/* Use WPCF7_Submission object's get_posted_data() method to get it. */
$submission = WPCF7_Submission::get_instance();

if ( $submission ) {
    $posted_data = $submission->get_posted_data();
}

Změna umístění pozice obsahového editoru nebo metaboxu v administraci

How to Move and Position The WordPress WYSIWYG Visual Editor
http://www.farinspace.com/move-and-position-wordpress-visual-editor/

Move excerpt meta box to above content editor
http://wordpress.stackexchange.com/questions/137571/move-excerpt-meta-box-to-above-content-editor

Move custom meta box above editor
http://wordpress.org/support/topic/move-custom-meta-box-above-editor