Рубрики
Wordpress

Как изменить имя и адрес отправителя WordPress

При различных событиях в WordPress система отправляет письма пользователям и администратору сайта и подставляет стандартные имя и адрес отправителя WordPress. Это могут быть письма отправляемые при регистрации, восстановлении пароля, регистрации нового пользователя, нового блога(при включенном режиме multisite) и все письма отправляются с адреса по умолчанию WordPress <wordpress@mysite.ru>, где mysite.ru – это домен Вашего сайта. Есть множество случаев, когда это не приемлемо. Например, если сайт является корпоративным сайтом компании и необходимо, чтобы вся корреспонденция исходила от действующего адреса компании, например info@company.ru.

Рубрики
Wordpress

Создание произвольных таблиц в WordPress

При создании плагина для WordPress может возникнуть необходимость сохранять данные в базу данных WordPress. Есть несколько способов решения данной задачи. Можно создать страницу настроек, используя Settings API, либо сохранять данные прямо в таблицу с опциями, используя update_option() и get_option() или создать свою собственную таблицу в базе данных.

В данном примере будет рассмотрена возможность создания произвольной таблицы с использованием возможностей WordPress.

Прежде чем что-то записать в таблицу нужно быть уверенным, что таблица существует. Именно поэтому во время активации плагина надо эту таблицу создать.

В WordPress предусмотрен хук, который можно использовать для перехвата события активации и дезактивации плагина, а так же при его деинсталяции. С помощью этих хуков можно выполнить любую функцию, в том числе и функцию создания таблицы при активации и, если необходимо, функцию удаления таблицы при дезактивации или деинсталяции.

Создание таблиц wordpress при активации плагина

Чтобы быть уверенным, что таблица существует, ее необходимо создать при активации плагина. Для этого используют хук – register_activation_hook(), который может содержать два параметра – основной файл плагина и название функции, которую надо выполнить при активации.

В основном файле плагина вы можете написать следующий код:

register_activation_hook( __FILE__, 'create_plugin_tables' );
function create_plugin_tables()
{
	// введите код создания таблиц
}

При создании таблиц в WordPress важно соблюдать стандарты и не забыть указать префиксы таблиц. Стандартным префиксом является сочетание wp_, но вы можете изменить этот префикс либо во время установки WordPress, либо отредактировав файл wp-config.php. Для того, что бы избежать ошибки указания префика необходимо использовать данные из объекта $wpdb.

function create_plugin_tables()
{
	global $wpdb;
	// префикс текущего сайта
	echo $wpdb->prefix . 'tablename';

	// мультисайт, оригинальный префикс
	echo $wpdb->base_prefix . 'tablename';
}

Разница между свойствами prefix и base_prefix видна при использовании режима мультисайт. При использовании $wpdb->prefix возвращается префикс для текущего сайта, а при использовании $wpdb->base_prefix возвращается значение указанное в wp-config.php.

Для создания таблицы в WordPress необходимо написать SQL запрос и поместить его в специальную переменную, чтобы потом вставить в функцию dbDelta().

function create_plugin_tables()
{
	global $wpdb;
	$table_name = $wpdb->prefix . 'tablename';
	$sql = "CREATE TABLE $table_name (
			id int(11) NOT NULL AUTO_INCREMENT,
			name varchar(255) DEFAULT NULL,
			UNIQUE KEY id (id)
	);";
	require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
	dbDelta( $sql );
}


Функция dbDelta() проверит базу данных на предмет существования в ней таблицы, указанной в запросе, и если такая таблица уже существует запрос не будет выполняться повторно.

Что бы функция dbDelta() была доступна, перед ее вызовом надо позаботиться о том, что бы подключить содержащий ее файл /wp-admin/includes/upgrade.php.

После того, как плагин будет вновь активирован таблица будет создана.

Добавление информации в произвольную таблицу

Для добавления данных во вновь созданную таблицу потребуется вновь использовать объект $wpdb, который содержит метод insert(). Этот метод позволяет добавлять данные в существующие таблицы.

Метод insert() имеет три параметра: название таблицы, массив данных для вставки и формат вставляемых данных. Формат данных указывается для предотвращения конфликтов типов данных.

function insert_custom_table()
{
	global $wpdb;
	$wpdb->insert(
			'table',
			array(
				'id' => 1,
				'name' => 'John'
			),
		array(
			'%d',
			'%s'
		)
	);
}

Получение данных из произвольной таблицы

Для извлечения данных из таблицы используется все тот же $wpdb объект. Есть два способа получить данные, метод $wpdb->get_row() и метод $wpdb->get_results().

Метод get_row() возвращает только одну строку, его следует использовать при запросе первичного ключа таблицы.

function get_by_id( $id )
{
	global $wpdb;
	$table_name = $wpdb->prefix . 'tablename';
	$row = $wpdb->get_row( $wpdb->prepare('SELECT * FROM '.$table_name.' WHERE id = %d', $id) );
	return $row;
}


Метод get_results() вернет все строки, удовлетворяющие строке запроса.

function get_by_name( $name )
{
	global $wpdb;
	$table_name = $wpdb->prefix . 'tablename';
	$results = $wpdb->get_results( $wpdb->prepare('SELECT * FROM '.$table_name.' WHERE name = %s', $name) );
	return $results;
}

Для выполнения каких-либо функций при дизактивации плагина используют хук – register_deactivation_hook().

Удаление таблицы при деинсталяции плагина

Чтобы удалить таблицу при деинсталяции плагина используется хук – register_uninstall_hook().

register_uninstall_hook( __FILE__, 'drop_plugin_tables');
function drop_plugin_tables()
{
	//drop a custom db table
	global $wpdb;
	$wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'tablename' );
}

Подробнее об объекте $wpdb читайте здесь(статья на английском).

Рубрики
Wordpress

Плагин – Яндекс.Карты для WordPress

Я написал плагин для Яндекс.Карты для WordPress.
История создания подобного плагина началась давно, в конце 2011 года. Тогда работа с Яндекс.Картами была одной из возможностей системы управления сайтом агентства недвижимости. Спустя некоторое время необходимость публиковать карты с указанием каких-либо объектов возникла и на других сайтах, которые я разрабатывал.

Плагин легко использовать, поскольку предусмотрено использование шорткодов. Существенным плюсом является то, что плагин не подгружает Яндекс.API на все страницы сайта, а только на те, на которые используют карты, это прилчно экономит время загрузки страницы и ее вес. При этом на одной странице может быть сколько угодно карт.

Плагин Яндекс.Карт корректно работает со всеми современными версиями WP.
Устанавливайте, комментируйте, пишите замечания.

Скачать Яндекс.Карты для WordPress:

Скачать плагин можно тут.

Рубрики
Wordpress

Неудачное обновление WordPress

Если при обновлении Wordpress ошибка и система не обновилась до конца и теперь вы видите сообщение “Brieflyunavailable for scheduled maintenance. Check back in a minute.”