! Эта статья устарела, смотрите новую версю плагина Ads WordPress 3.x
В плагине есть возможность создавать различные формы ввода в зависимости от категории объявления, а также изменять внешний вид готового объявления в зависимости от категории. В этой статье я расскажу как перевязывать между собой категории и шаблоны, для это вам потребуется минимальные знания html и php. Многие жалуются, что копание в коде это слишком сложно для них и надо было бы все сделать через админку, но я думаю, что управление в админке в таком случае получилось бы очень сложным и запутанным, на реализацию интерфейса потребовалось бы уйма времени, а главное всех вариантов и нюансов управления учесть все равно не получится и в конце концов придется таки нырять в phphtml код. Ну так чем огород городить Сделаем глубокий выдох и ныряем за мной.
Для начала предположим наш сайт (Городской портальчиг) имеет такую рубрикацию:
- Новости 1
- Законы 2
- Финансы 3
- Объявления 4
- Недвижимость 5
- Квартиры 6
- Дома 7
- Участки 8
- Офисы 9
- Склады 10
- Автомашины 11
- Бытовая техника 12
- Услуги 13
- Недвижимость 5
Итак открываем конфигурационный файл ads_config.php и пишем
$ads_config['form_templates']['Недвижимость'] = '/ads_rent_form.php';
$ads_config['form_templates'][11] = '/ads_auto_form.php'; // автомашины
$ads_config['form_templates']['default'] = '/form_default_template.php';
Здесь мы назначили рубрике Недвижимость свою собственную форму ввода это файл ads_rent_form.php место положение относительно папки плагина.
Другой вариант это использовать id рубрики, как это сделано для категории Автомашины.
Ну и наконец для всех остальных вариантов мы назначаем форму по умолчанию form_default_template.php.
Обратите внимание на то, что назначив рубрике Недвижимость свою форму, мы, тем самым прекращаем процесс выбора рубрик и переходим к форме ввода, но в Недвижимости ведь есть еще под рубрики, поэтому в форме придется самостоятельно организовать дополнительный элемент управления чекбокс или флажки либо переключатели, для того чтобы пользователь мог выбрать эти подрубрики.
Вот приме как это можно сделать:
if($post['ads_basecat']){
$args .= '&child_of='.$post['ads_basecat'];
}
elseif($_GET['ads_basecat']){
$args .= '&child_of='.$_GET['ads_basecat'];
};
if($ads_options['ads_exclude']){
$args .= '&exclude='.$ads_options['ads_exclude'];
};
$cat = get_categories($args);
foreach ($cat as $key=>$value) {
$category.="$value->name ";
}
?>
// далее в форме
Категория* =$category?>
Если мы хотим вообще пропустить этап выбора категории, нам надо назначить шаблон all
$ads_config['form_templates']['all'] = '/all_form.php';
Теперь переходим от ввода данных к отображение чего мы там наводили.
Шаблоны постов связываются с категориями через массив
$ads_config['post_templates']['Недвижимость'] = '/post_rent.php';
$ads_config['post_templates'][11] = '/post_auto.php';
$ads_config['post_templates']['default'] = '/post_default_template.php';
Как видите система точно такая же можно использовать название рубрики или ее id.
Тут надо еще сказать? что каждому объявление присваивается мета поле ads_basecat это поле своего рода флаг что запись является именно объявлением, и это же поле определяет шаблон с помощью которого будет показана запись. Так вот если мы имеем такую форму ввода как я описывал выше с Недвижимостью, то в этом случае ads_bascat будет присвоено id Недвижимости, а не ее под категорий.
А как сделать вывод по какому-то одному полю записи?
как например у вас выводится по городам
http://ili.com.ua/?ads_location=Донецк
Необходимо чтобы также вывод был по произвольным значениям полей. Подскажите пожалуйста.
сформировать строку запроса добавить к ней параметры
тоесть ваши поля ads_
ну например
http://ili.com.ua/?tag=detskiy-prazdnik&ads_location=Донецк&ads_name1=value1 …..
в данном случае мы запрашиваем записи по тегу детский праздник + добавляем условие что поле ads_location = Донецк и также добавляем второе условие поле ads_name1 = value1
условий может быть много
Спасибо! Заработало!
А почему после обновления файлов плагин выдаёт
Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /home/pengvisi/domains/pengvision.com.ua/public_html/www/wp-content/plugins/ads-wordpress/ads_config.php:1) in /home/pengvisi/domains/pengvision.com.ua/public_html/www/wp-content/plugins/ads-wordpress/ads.php on line 27
А Вордпресс просто умер
и посмертно написал
Warning: Cannot modify header information – headers already sent by (output started at /home/pengvisi/domains/pengvision.com.ua/public_html/www/wp-content/plugins/ads-wordpress/ads_config.php:1) in /home/pengvisi/domains/pengvision.com.ua/public_html/www/wp-includes/pluggable.php on line 850
Но когда я конфиг заменяю оригиналом всё снова в норме. Как это исправить? Мне нужно только двум рубрикам изменить шаблон.
Простите но я уже всё исправил там надо было через Дримвейвер
всё редактировать. Прекрасный плагин!
Простите но я уже всё исправил там надо было через Дримвейвер
всё редактировать. Прекрасный плагин!
А если имеется две разных формы и в одной есть обязательное поле с проверкой а в другой нет то как отключить эту проверку во второй форме потому что она не дает сохранить говорит незаполнено поле которого вообще нет из массива array в форме параметр убрал а проверку просит
да с такими проверками немного сложнее
в простейшем случае можно обойтись
оператором условной проверки
function ads_filter($post){
$ads_basecat = ($post['ads_basecat'])?$post['ads_basecat']:$_GET['ads_basecat'];
if($ads_basecat = 45) не делаем проверку
else делаем проверку
$post['post_category'][] = $ads_basecat;
return $post;
}
add_filter(‘ads_check_fields’, ‘ads_filter’);
ориентируемся на переменную $post['ads_basecat'] она должна содержать номер категории
ну если категорий много и для каждой надо проверять разный набор то лучше использовать конструкцию
switch case
посмотрите примеры в файлах ads_config1-4.php
У меня главная страница сайта статическая, я хотел бы, что бы под текстом на этой странице выдавались объявления (последние), как на вашем сайте. Есть ли простое решение?
ну не знаю насколько это простое будет для вас
если только для главной страницы надо сделать вывод то придется залазить в код шаблона
я бы использовал функцию get_posts($args)
Нужно вывести список постов по тегу например “..&ads_location=Киев”, а файл index.php темы не умеет это (там свои постройки), как можно это сделать по-другому?
Благодарю!
надо сформировать адрес (GET запрос ) и адресной строке добавить
&ads_location=Киев например
http://ili.com.ua/auto-moto?ads_location=Киев здесь так и сделано, собственно, тоже самое относится и к другим полям с префиксом ads_ действовать аналогичным образом, ну а формировать такие ссылки это уже самостоятельно надо