Tuneando el plugin ‘Users Submitted Post’ de WordPress para custom post type y custom taxonomy

El plugin ‘Users Submitted Post’ permite que los usuarios puedan publicar posts en nuestra web desde el front end y nos da la posibilidad de configurar varias opciones (moderación, campos etc). Aquí más información sobre este fantástico plugin.

Par poder utilizar este plugin con Custom post type y custom taxonomy no encontré otra opción que retocar el código, lo que no es la mejor manera si en el futuro tenemos que actualizar el plugin. Pero de momento es la solución más rápida que encontré.

Para esto tendremos que editar 2 archivos del mismo plugin.

1-wp-content/plugins/user-submitted-posts/user-submitted-posts.php en la línea 251

$postData = array();
$postData['post_title']   = $title;
$postData['post_content'] = $content;
$postData['post_status']  = 'pending';
$postData['post_author']  = $authorID;
//Add here the custom post type name you want to save the post as
//Añade aquí el tipo de post
$postData['post_type']  = 'My_custom_post_type'';
$numberApproved           = $usp_options['number-approved'];

Dónde sustituiremos My_custom_post_typepor el nombre que hemos asignado al custom post type que hemos creado previamente.

Si además hemos creado custom taxonomies, tendremos que cambiar la función que viene con el submit post del plugin, que está escrita para guardar las categorías pero no las custom taxonomies.
Para esto, en el mismo archivo cambiaremos la línea 278

wp_set_post_categories($newPost, array($category));

por lo siguiente

wp_set_object_terms($newPost, array($category), 'My_cutom_taxonomy');

Dónde sustituiremos My_cutom_taxonomy por el nombre que hemos asignado a las categorías personalizadas.

Para que nos aparezcan estas categorías en las opciones generales del ‘general form options’ del plugin y poder de esta manera asignar una custom category por defecto, a la hora de crear una nueva entrada, cambiaremos las siguientes líneas (725 del mismo archivo)

											<?php $categories = get_categories(array('hide_empty'=> 0)); ?>
											<?php foreach($categories as $category) { ?>
											
											<div class="mm-radio-inputs">
												<label class="description">
													<input <?php checked(true, in_array($category->term_id, $usp_options['categories'])); ?> type="checkbox" name="usp_options[categories][]" value="<?php echo $category->term_id; ?>" /> 
													<span><?php echo htmlentities($category->name); ?></span>
												</label>
											</div>
											
											<?php } ?>

por estas

											<?php $categories = get_terms('My_cutom_taxonomy',array('hide_empty'=> 0)); ?>
											<?php foreach($categories as $category) { ?>
											
											<div class="mm-radio-inputs">
												<label class="description">
													<input <?php checked(true, in_array($category->term_id, $usp_options['categories'])); ?> type="checkbox" name="usp_options[categories][]" value="<?php echo $category->term_id; ?>" /> 
													<span><?php echo htmlentities($category->name); ?></span>
												</label>
											</div>
											
											<?php } ?>

Dónde otra vez sustituiremos My_cutom_taxonomy por el nombre que hemos asignado a las categorías personalizadas.

Ahora hemos que hacer aparecer nuestras custom taxonomies en el dropdown del form, en lugar de las categorías de los posts de wordpress. El plugin viene con dos tipos de form, el clasic y el html5. Según cual usemos abriremos y editaremos el archivo correspondiente (o ambos por si no hemos decidido todavía). en este caso editaremos el archivo wp-content/plugins/user-submitted-posts/views/submission-form.php, que corresponde al HTML5 form.
Buscamos este código (está por la línea 54)

		<fieldset class="usp-category">
			<label for="user-submitted-category"><?php _e('Post Category'); ?></label>
			<select name="user-submitted-category">
				<?php foreach($usp_options['categories'] as $categoryId) { $category = get_category($categoryId); if(!$category) { continue; } ?>
				<option value="<?php echo $categoryId; ?>"><?php $category = get_category($categoryId); echo htmlentities($category->name); ?></option>
				<?php } ?>
			</select>
		</fieldset>

Y lo sostituimos por lo siguiente

		<fieldset class="usp-category">
<?php
function get_terms_dropdown($taxonomies, $args){
    $myterms = get_terms($taxonomies, $args);
    $output ="<select name='user-submitted-category' id='user-submitted-category' class='usp_select'>";
    $output .="<option value='#'>Please select a business category</option>";
    foreach($myterms as $term){
        $term_name =$term->name;
        $term_id =$term->term_id;
        $output .="<option class='usp_option' value='".$term_id."'>".$term_name."</option>";
    }
    $output .="</select>";
return $output;
}
$taxonomies = array('My-custom-tazonomy);
$args = array('orderby'=>'name','hide_empty'=>true);
$select = get_terms_dropdown($taxonomies, $args);
 
$select = preg_replace("#<select([^>]*)>#", "<select$1>", $select);
echo $select;?>
		</fieldset>

Otra vez cambiaremos My-custom-taxonomy por nuestra categoría