Ads WordPress добавление\отображение произвольных полей

План такой:

  1. Добавление полей в форму ввода
  2. Отображение данных
  3. Проверка данных

Форма ввода

Откройте файл в папке плагина form_default_template.php - это форма ввода используется по умолчанию.
Обязательный элемент любой формы - массив $_SESSION['ads_filds_form']
Это защита от хакеров, чтобы они не могли подсунуть через форму ввода произвольную переменную. Как видите здесь идет список имен элементов формы.
Например мы решили добавить поле адреса, нет давайте лучше 2 поля улица:ads_street и номер дома:ads_home, причем улица обязательный параметр, а номер дома нет.

Внимание название произвольных полей должно начинаться с префикса ads_ !

Добавляем поля в массив ads_filds_form:

	$_SESSION['ads_filds_form'] = ('ads_location','ads_url','post_title','post_content',
'comment_status','tags_input','captcha','ROTATE_LEFT','ROTATE_RIGHT','DELETE_IMG',
'UPLOAD_IMG','CHECK_FORM','RESET', 'ads_phone','ads_email','ads_lifetime',
'ads_street', 'ads_home'  );

Далее идет обычный html текст ну что-то вроде

где эта улица*:
<input name="ads_street" />
где этот дом:
<input name="ads_home" />

Добавляем этот текст в тег form нашей формы.

В плагине используется библиотека Дмитрия Котерова . Поэтому не надо устанавливать никаких значений value в input, иначе значение полей будет все время сбрасываться если пользователь ввел что-то неправильно.

C формой вроде бы разобрались, переходим к отображению полей.

Вывод данных

Открываем шаблон post_default_template.php (он также используется по умолчанию) и для начала рассмотрим его повнимательнее.
Шаблон состоит из 2 частей :

<? if(is_single() OR is_page()):?>
//  мы находимся на странице записи полный вид объявления
<?else:?>
//  мы находимся в рубрике короткий вид объявления
<?endif?>

Ну, думаю уже из комментариев понятно, что первая часть будет отображаться когда мы находимся непосредственно на странице объявления - полный вариант, вторая часть будет работать когда мы просматриваем рубрику (список) объявлений то есть короткий вариант. Дальше уже от вас зависит где и как вы будите выводить новые поля. Но логично было бы выводить улицу и номер дома в полном варианте.
Все то, что мы добавили в форме будет автоматически доступно в шаблоне поста. Добавляем вывод:

Улица : <?=$ads_street?> <? if( $ads_home )  'дом '.$ads_home;?>

Напомню, все выше сказанное будет работать если вы включили опцию Применять шаблоны постов в админке плагина

Проверка данных

Теперь переходим к самому сложному, нам надо организовать проверку данных, в данном случае нам надо проверить ввел ли пользователь улицу или нет.
Для этого в файле ads_config.php надо подключить пользовательский фильтр ads_check_fields, вернее он там уже подключен и нам надо только изменить функцию ads_filter:

function ads_filter($post){
    //  например исправляем url адресс если пользователь ввел адерс без http://
    // добавляем его
     if($post['ads_url'] == 'http://') $post['ads_url'] = '';
     elseif($post['ads_url'] AND !('~^http://~',$post['ads_url'])){
         $post['ads_url'] = 'http://'.$post['ads_url'];
     }
     //  проверка улицы
     if( ($post['ads_street'] ){
         $post['error'] = 'ВЫ забыли ввести улицу!';
     }
    return $post;
}
add_filter('ads_check_fields', 'ads_filter');

Сама проверка if( empty($post['ads_street'] ) если в ads_street пусто генерируем ошибку $post['error'] = ‘ВЫ забыли ввести улицу!’; пока фильтр будет возвращать какую-либо строку в $post['error'] форма будет считаться не заполненной. Если у вас много полей и много ошибок то просто присоединяйте все сообщения об ошибках в $post['error'] .= “Еще одна ошибка!”;

Для проверки ввода файлов, их типа, размера и т.д используйте фильтр ads_check_files. Вот как это может выглядеть:

function ads_filter_files($files){
   if( $files[0] AND  !('~^image/~',$files[0]['type']) ){
        $files['error'] .= 'Первая загрузка только картинка JPG, GIF, PNG<br />';
        $postID = $files[0]['id'];
    	$res = wp_delete_attachment($postID);
        $files[0] = 0;
   }
 
   if(!('~rar|zip|force-download~',$files[1]['type']) ){
        $files['error'] .= 'Вторая загрузка только архив RAR или ZIP<br />';
        $postID = $files[1]['id'];
    	$res = wp_delete_attachment($postID);
        $files[1] = 0;
   }
   return $files;
}
add_filter('ads_check_files', 'ads_filter_files');

Очень показательный пример первое условие проверяет наличие файла № 1 и его mime type - это должно быть изображение, если тип файла не соответствует он тут же удаляется $res = wp_delete_attachment($postID);. Аналогично проверяется тип второго файла, но это уже должен быть архив.

Ну и напоследок, чтобы научить WordPress понимать новые типы файлов надо использовать фильтр upload_mimes. Так например широко известный формат rar WordPress не поддерживается, показываю как его добавить:

// добавляем новый тип медиа объектов  RAR архивы
function additional_types2($mimes) {	$mimes['rar'] = 'application/x-rar-compressed';	return $mimes;}
add_filter('upload_mimes', 'additional_types2');
Рубрика: Ads WordPress, WordPress апреля 29, 2009.
/ » » »
Выбираем тему для сайта для заработка в интернет с Google Adsense. 7 Июля, 2007 За 90 минут образовалось 1033 круга на полях с пшеницей. слов wordpress=WordPress work-phone=Рабочий телефон workflow= Рабочий. Расширенный поиск продуктов по произвольным параметрам. Powered by WordPress & designed by Andreas Viklund. Кроссбраузерная верстка (сайт одинаково хорошо отображается во всех браузерах) Убраны все внешние ссылки. Добавление ссылки на поиск людей/комментарии.
Подпишись на RSS

Разработки

Страницы

Рубрики

Города

Ключевые слова (tags)

Ссылки

Счетчики

Реклама