Публикация в группе: Плагин WP-Recall - Личный кабинет на WordPress

Категории группы: Полезное

Внимание! Данная статья устарела, неактуальна и представляет лишь исторический интерес.

Благодаря доработке функционала плагина Wp-Recall и в частности дополнения публикации появилась возможность более гибко влиять на вывод формы публикации от плагина Wp-Recall. Рассмотрим несколько примеров воздействия на выводимую форму публикации для получения желаемого результата.

Итак, напомню, что вывод формы публикации осуществляется шорткодом [ public-form ].

Но мало кто знает, что мы можем публиковать через данную форму записи не только типа post, но и любого другого типа, который нам необходим. Допустим, на нашем сайте есть записи произвольного типа custom-type. Данные записи мы можем публиковать через админку и с этим все замечательно, но как быть если появилось желание дать возможность публикации новых записей этого типа через фронт-энд сайта, с его страниц, другим пользователям? Для решения этой задачи достаточно указать в шорткоде формы публикации нужный тип записи через атрибут post_type. Например:

[ public-form post_type='custom-type' ]

после чего данная форма будет публиковать записи указанного типа.

У произвольных типов записей часто присутствуют свои таксономии, которые необходимо также назначать для публикуемой записи. Чтобы вывести в форме публикации список существующих терминов таксономии данного типа записи для их выбора, необходимо указать какая именно таксономия используется для данного типа записи. Например:

add_filter('taxonomy_public_form_rcl','add_taxonomy_publicform');
function add_taxonomy_publicform($tax){
//указываем таксономию custom-tax для типа записи custom-type
if (!$tax['custom-type']) $tax['custom-type'] = 'custom-tax';	
return $tax;
}

В результате форма публикации начнет предлагать для типа записи custom-type существующие термины таксономии custom-tax.

Форма публикации при своем выводе всегда по-умолчанию выводит весь набор необходимых для публикации полей, куда входят: заголовок, редактор, загрузчик медиафайлов и произвольные поля, если они были созданы.

Рассмотрим возможности по отключению определенных элементов формы публикации, если они нам, по каким то причинам, стали не нужны. Для этого необходимо обратиться через фильтр формы публикации к массиву настроек формы и отключить, то что нам не нужно:

add_filter('fields_public_form_rcl','edit_publicform_rcl',10,2);
function edit_publicform_rcl($fields,$data){
	
	$fields = array(
            	'title'=>true, //поле заголовка
            	'termlist'=>true, //выпадающий список таксономии типа записи
            	'editor'=>true, //поле редактирования основного контента записи
            	'custom_fields'=>true, //список произвольных полей
                'tags'=>true, //поле метки, только для типа post
            	'upload'=>true //возможность загрузки медиафайлов
            );

       return $fields;
}

В созданную функцию edit_publicform_rcl() мы получаем массив полей формы публикации и которые по-умолчанию имеют значение true, если какое то конкретное поле формы нам не требуется для вывода, то мы проставляем ему значение false или 0.

Второй аргумент созданной функции передает нам данные создаваемой или уже созданной публикации (если идет ее редактирование), используя которые мы можем проставлять различные проверки, например, о принадлежности поста к нужному типу записи:

add_filter('fields_public_form_rcl','edit_publicform_rcl',10,2);
function edit_publicform_rcl($fields,$data){
	if($data->post_type!='custom-type') return $fields;

	$fields = array(
            	'title'=>true,
            	'termlist'=>false,
            	'editor'=>true,
            	'custom_fields'=>false,
                'tags'=>false,
            	'upload'=>false
            );

       return $fields;
}

В итоге форма публикации для типа записи custom-type будет иметь только заголовок и редактор, все остальные поля будут убраны. Такая же картина будет наблюдаться при редактировании записи такого типа.

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

add_filter('pre_update_postdata_rcl','add_custom_post_title');
function add_custom_post_title($post){
if (!$post['post_title']) $post['post_title'] = 'Тут заголовок какой нам нужен';	
return $post;
}

В функцию add_custom_post_title() мы получаем данные публикуемой или редактируемой записи перед ее сохранением в БД и редактируем их нужным нам образом, в данном случае, мы назначаем свой заголовок, если он отсутствует.

По-умолчанию, все записи будут сразу публиковаться, поэтому имеет смысл посылать записи с формы на модерацию:

add_filter('pre_update_postdata_rcl','edit_post_status_rcl');
function edit_post_status_rcl($post){
if($post['post_type']!='custom-type') return $post;
$post['post_status'] = 'pending';    
return $post;
}

Иногда возникает необходимость добавить в форму публикации какие то свои поля, которые будут передавать данные для дальнейшей обработки. Рассмотрим возможность добавления своего текстового поля в форму публикации и обработку данных полученных от этого добавленного поля.

Для начала выведем наше поле в форме публикации:

add_filter('public_form_rcl','add_custom_field_publicform',10,2);
function add_custom_field_publicform($fls,$data){
        //делаем проверку на тип записи
        if($data->post_type!='custom-type') return $fls;

        $fls .= '<label>Имя поля <span class="required">*</span>:</label> 
       <input type="text" required name="name-field" id="name-field" value="">';
        
        return $fls;                    
    }

С помощью кода выше мы добавили в форму публикации наше текстовое поле, которые будет выводится только при публикации или редактировании записей типа custom-type.

Данные отправленные из этого поля будут обрабатываться с помощью кода ниже:

add_action('update_post_rcl','save_fielddata_publicform',10,2);
function save_fielddata_publicform($post_ID, $postdata){
    global $wpdb;
    if($postdata['post_type']!='custom-type') return false;
    
    if(isset($_POST['name-field'])) $field = $_POST['name-field'];
    else $field = 0;
    
    update_post_meta($post_ID,'name-field',$field);
}

Чтобы не усложнять код мы просто сохранили полученные данные из нашего поля в произвольное поле публикуемой или редактируемой записи, но при желании можно как угодно обрабатывать эти данные и сохранять туда куда нужно.

Если к форме публикации произвольного типа записи необходимо прикрепить функционал произвольных полей Wp-Recall, то вникаем в статью "Добавляем произвольные поля к произвольному типу записи через форму публикации Wp-Recall"

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

66

Автор публикации

не в сети 45 минут

Андрей CS

12K
рассматриваю задания
Комментарии: 2744Публикации: 481Регистрация: 30-11--0001Продаж/Покупок: 0/0