Marca d’água nas imagens

Desafio dado pelo cliente: marca d’água em determinadas imagens. Fui estudar na internet e achei o código desse blog Webdicas.

Essa é a imagem utilizada como teste:
foto_009

E essa é a imagem da marca d’água:
marca

Ambas vieram do blog que eu usei como base para estudar.

O código é esse:

<?php
	$foto = "foto_009.jpg";
	$foto = imagecreatefromjpeg($foto);
	$marca = "marca.png";
	$marca = imagecreatefrompng($marca);

	$marca_width = imagesx($marca);
	$marca_height  = imagesy($marca);

	$foto_width = imagesx($foto);
	$foto_height  = imagesy($foto);

	//imagecopyresampled($foto,$marca,($foto_width/2)-($marca_width/2),($foto_height/2)-($marca_height/2),0,0,$marca_width,$marca_height,$marca_width,$marca_height);

	$position = array(
		'upper' => array(
			'left' => array(
				'x' => 0,
				'y' => 0
				),
			'middle' => array(
				'x' => ($foto_width/2)-($marca_width/2),
				'y' => 0
				),
			'right' => array(
				'x' => $foto_width-$marca_width,
				'y' => 0
				)
			),
		'middle' => array(
			'left' => array(
				'x' => 0,
				'y' => ($foto_height/2)-($marca_height/2)
				),
			'middle' => array(
				'x' => ($foto_width/2)-($marca_width/2),
				'y' => ($foto_height/2)-($marca_height/2)
				),
			'right' => array(
				'x' => $foto_width-$marca_width,
				'y' => ($foto_height/2)-($marca_height/2)
				)
			),
		'bottom' => array(
			'left' => array(
				'x' => 0,
				'y' => $foto_height-$marca_height
				),
			'middle' => array(
				'x' => ($foto_width/2)-($marca_width/2),
				'y' => $foto_height-$marca_height
				),
			'right' => array(
				'x' => $foto_width-$marca_width,
				'y' => $foto_height-$marca_height
				),
			)
		);
?>

Diferente do blog, adicionei coordenadas de posicionamento da marca d’água. Os códigos abaixo deverão ser colocados após o código acima.

Canto superior esquerdo da imagem

<?php
	$paltura = 'upper';
	$plargura = 'left';
	imagecopyresampled($foto,$marca,$position[$paltura][$plargura]['x'],$position[$paltura][$plargura]['y'],0,0,$marca_width,$marca_height,$marca_width,$marca_height);
	imagejpeg($foto,'foto_'.$paltura.'-'.$plargura.'.jpg',100);
?>

<img src="<?php echo 'foto_'.$paltura.'-'.$plargura.'.jpg'; ?>" />

A imagem com a marca d’água ficará assim:
foto_upper-left

Canto superior no meio da imagem

<?php
	$paltura = 'upper';
	$plargura = 'middle';
	imagecopyresampled($foto,$marca,$position[$paltura][$plargura]['x'],$position[$paltura][$plargura]['y'],0,0,$marca_width,$marca_height,$marca_width,$marca_height);
	imagejpeg($foto,'foto_'.$paltura.'-'.$plargura.'.jpg',100);
?>

<img src="<?php echo 'foto_'.$paltura.'-'.$plargura.'.jpg'; ?>" />

A imagem com a marca d’água ficará assim:
foto_upper-middle

Canto superior direito da imagem

<?php
	$paltura = 'upper';
	$plargura = 'right';
	imagecopyresampled($foto,$marca,$position[$paltura][$plargura]['x'],$position[$paltura][$plargura]['y'],0,0,$marca_width,$marca_height,$marca_width,$marca_height);
	imagejpeg($foto,'foto_'.$paltura.'-'.$plargura.'.jpg',100);
?>

<img src="<?php echo 'foto_'.$paltura.'-'.$plargura.'.jpg'; ?>" />

A imagem com a marca d’água ficará assim:
foto_upper-right

No meio, do lado esquerdo da imagem

<?php
	$paltura = 'middle';
	$plargura = 'left';
	imagecopyresampled($foto,$marca,$position[$paltura][$plargura]['x'],$position[$paltura][$plargura]['y'],0,0,$marca_width,$marca_height,$marca_width,$marca_height);
	imagejpeg($foto,'foto_'.$paltura.'-'.$plargura.'.jpg',100);
?>

<img src="<?php echo 'foto_'.$paltura.'-'.$plargura.'.jpg'; ?>" />

A imagem com a marca d’água ficará assim:
foto_middle-left

No meio da imagem

<?php
	$paltura = 'middle';
	$plargura = 'middle';
	imagecopyresampled($foto,$marca,$position[$paltura][$plargura]['x'],$position[$paltura][$plargura]['y'],0,0,$marca_width,$marca_height,$marca_width,$marca_height);
	imagejpeg($foto,'foto_'.$paltura.'-'.$plargura.'.jpg',100);
?>

<img src="<?php echo 'foto_'.$paltura.'-'.$plargura.'.jpg'; ?>" />

A imagem com a marca d’água ficará assim:
foto_middle-middle

No meio, do lado direito da imagem

<?php
	$paltura = 'middle';
	$plargura = 'right';
	imagecopyresampled($foto,$marca,$position[$paltura][$plargura]['x'],$position[$paltura][$plargura]['y'],0,0,$marca_width,$marca_height,$marca_width,$marca_height);
	imagejpeg($foto,'foto_'.$paltura.'-'.$plargura.'.jpg',100);
?>

<img src="<?php echo 'foto_'.$paltura.'-'.$plargura.'.jpg'; ?>" />

A imagem com a marca d’água ficará assim:
foto_middle-right

No canto inferior esquerdo da imagem

<?php
	$paltura = 'bottom';
	$plargura = 'left';
	imagecopyresampled($foto,$marca,$position[$paltura][$plargura]['x'],$position[$paltura][$plargura]['y'],0,0,$marca_width,$marca_height,$marca_width,$marca_height);
	imagejpeg($foto,'foto_'.$paltura.'-'.$plargura.'.jpg',100);
?>

<img src="<?php echo 'foto_'.$paltura.'-'.$plargura.'.jpg'; ?>" />

A imagem com a marca d’água ficará assim:
foto_bottom-left

No canto inferior, no meio da imagem

<?php
	$paltura = 'bottom';
	$plargura = 'middle';
	imagecopyresampled($foto,$marca,$position[$paltura][$plargura]['x'],$position[$paltura][$plargura]['y'],0,0,$marca_width,$marca_height,$marca_width,$marca_height);
	imagejpeg($foto,'foto_'.$paltura.'-'.$plargura.'.jpg',100);
?>

<img src="<?php echo 'foto_'.$paltura.'-'.$plargura.'.jpg'; ?>" />

A imagem com a marca d’água ficará assim:
foto_bottom-middle

No canto inferior direito da imagem

<?php
	$paltura = 'bottom';
	$plargura = 'right';
	imagecopyresampled($foto,$marca,$position[$paltura][$plargura]['x'],$position[$paltura][$plargura]['y'],0,0,$marca_width,$marca_height,$marca_width,$marca_height);
	imagejpeg($foto,'foto_'.$paltura.'-'.$plargura.'.jpg',100);
?>

<img src="<?php echo 'foto_'.$paltura.'-'.$plargura.'.jpg'; ?>" />

A imagem com a marca d’água ficará assim:
foto_bottom-right

Tag More

A tag More é muito mais que uma tag. Serve também para fazer algumas gambis. Para isso, deve separar os dois lados:

$conteudo = get_the_content();
$conteudo = preg_replace( '/<span id="more-\d+"><\/span>/i', '<!-- more -->', $conteudo );
$conteudo = preg_split( '/\<\!\-\-\s*more\s*\-\-\>/i', $conteudo );
print_r( $conteudo );

Número de posts por página

Dentro do admin do wordpress é possível setar o número de post’s que serão mostrados na listagem.

Exemplo:
Quando você está vendo uma lista de produtos e dentro da página é possível listar 12, 24 ou 36 produtos, os número 12, 24 e 36 são as quantidade máxima de post’s dentro de uma página.

Esse número é possível setar no admin:
No menu do admin, localize a opção ‘Configurações (ou Settings)’ e clique em Leitura (ou Reading).
Vai abrir uma página, altere o valor do campo ‘As páginas do blog mostram no máximo’ (ou Blog pages show at most). Clique em Salvar (ou Salve Changes).

Criei uma função para ser usada e reaproveitada em vários projetos:

function total_de_posts_por_pagina(){
    global $wp_query;
    return $wp_query->query_vars['posts_per_page']);
}

Taxonomy

“Taxonomia é uma daquelas palavras que a maioria das pessoas nunca ouvir ou usar. Basicamente, uma taxonomia é uma forma de agrupar as coisas.

Por exemplo, eu poderia ter um monte de diferentes tipos de animais. Eu posso agrupá-los de acordo com várias características e depois atribuir os nomes dos grupos. Isto é algo que a maioria das pessoas encontra em aulas de biologia, e é conhecida como a Taxonomia de Lineu.

No WordPress, uma “taxonomia” é um mecanismo de agrupamento para algumas mensagens (ou links ou tipos de pós personalizado).” (retirado do Codex e traduzido pelo Google Translater)

Registrando uma taxonomy

function people_init() {
	// create a new taxonomy
	register_taxonomy(
		'people',
		'post',
		array(
			'label' => __( 'People' ),
			'rewrite' => array( 'slug' => 'person' ),
			'capabilities' => array(
				'assign_terms' => 'edit_guides',
				'edit_terms' => 'publish_guides'
			)
		)
	);
}
add_action( 'init', 'people_init' );

Fonte: register_taxonomy

Gravando um valor em uma taxonomia
Você pode gravar uma valor via adm ou:

$cat_ids = array( 6,8 );
wp_set_object_terms( '42', $cat_ids, 'category' );

Listando todas as taxonomias gravadas

$categories = get_terms( 'category', 'orderby=count&hide_empty=0' );

Fonte: get_terms

Buscando a taxonomy do post

$term_list = wp_get_post_terms($post->ID, 'my_term', array("fields" => "all"));

Fonte: wp_get_post_terms

Buscando todos os post’s com taxonomia escolhida

$query = new WP_Query( array( 'person' => 'bob' ) );

Ou

$args = array(
	'tax_query' => array(
		array(
			'taxonomy' => 'person',
			'field' => 'slug',
			'terms' => 'bob'
		)
	)
);
$query = new WP_Query( $args );

Fonte: WP_Query()

Como ativar temas no WPMU

Daqui a pouco eu vou montar uma sessão chamada “Não se mate! Tudo tem uma solução” pq tem horas q as coisas ficam tao sem sentido que dá vontade de largar tudo.

Agora pouco eu tive um momento desses. Quando é criado um tema para um WP normal (aquele que só comporta um site) você vai em Aparências >> Themes e está lá, o seu lindo tema está disponível para ser ativado.

Quando você tem um WPMU (aquele que é possível ter vários sites sobre o mesmo domínio), além do painel do site tem um paniel acima que abrange todos os temas e é nele que deve estar o seu tema. Ative o mesmo para que ele esteja disponível para ser ativado em todos os outros blogs (ou sites).

Se você incluiu o tema o mesmo está gerando o erro “s seguintes temas foram instalados mas incompletamente. Os temas devem possuir uma folha de estilos e um modelo.”, significa que o style.css não foi incluído no functions.php.

Agora, se mesmo tendo feito tudo isso e o tema não aparece, copie e cole o trecho a seguir (só troque o nome do tema, por favor) em um arquivo style.css que o problema vai ser resolvido.

/*
Theme Name: Twenty Eleven
Theme URI: http://wordpress.org/extend/themes/twentyeleven
Author: the WordPress team
Author URI: http://wordpress.org/
Description: The 2011 theme for WordPress is sophisticated, lightweight, and adaptable. Make it yours with a custom menu, header image, and background -- then go further with available theme options for light or dark color scheme, custom link colors, and three layout choices. Twenty Eleven comes equipped with a Showcase page template that transforms your front page into a showcase to show off your best content, widget support galore (sidebar, three footer areas, and a Showcase page widget area), and a custom "Ephemera" widget to display your Aside, Link, Quote, or Status posts. Included are styles for print and for the admin editor, support for featured images (as custom header images on posts and pages and as large images on featured "sticky" posts), and special styles for six different post formats.
Version: 1.5
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: dark, light, white, black, gray, one-column, two-columns, left-sidebar, right-sidebar, fixed-width, flexible-width, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-image-header, featured-images, flexible-header, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready
Text Domain: twentyeleven
*/