fuck_ask
@fuck_ask
web программист

У роли подписчиков Wordpress нет доступа к функциям используемые в коде, как исправить?

Есть произвольный тип записи, созданный через function.php и на отдельной странице подвязан код с формой для создания в ней записи. К этой странице есть доступ у всех.
Вот в чем вопрос, когда я создаю запись через авторизованного пользователя с ролью Администратор или с любой у кого есть доступ к записям, то форма работает корректно. А у подписчиков не добавляются теги а сама запись создается.
Как быть в такой ситуации? Может нужно объявить глобальные переменные для ролей? Так как доступ к консоли ВП не хотелось бы давать всем.
Вот код добавления записи backend:
$error = false;
 $post_title = $_POST['title'];
 $post_category = $_POST['cat'];
 $post_tag = $_POST['tag'];
 if(trim($_POST['collection_new'])){
	$post_collection = $_POST['collection_new']; 
 }else{
	$post_collection = $_POST['collection'];
 }
 $post_content = $_POST['textbook'];
 $post_excerpt = $_POST['excerpt'];
 $post_auditor = $_POST['auditor'];
 if(trim($_POST['theend'])){
	$post_theend = $_POST['theend'];
 }else{
	 $post_theend = 'no';
 }
 
 $new_post = array(
 'ID' => '',
 'post_author' => $user->ID,
 'post_type' => 'book',
 'post_content' => $post_content,
 'tax_input' => array(
 'genre' => $post_category, 
 'writer' => $post_tag, 
 'collection' => $post_collection
 ),
 'post_title' => $post_title,
 'post_status' => 'publish',
 'post_excerpt' => $post_excerpt,
 'meta_input' => [ 
	 'auditor' => $post_auditor, 
	 'status' => 'no', 
	 'blocked' => 'no', 
	 'theend' => $post_theend,
	 'post_views_count' => 0,
 ],  
 );
	if($_FILES['image_upload']['size'] > 0){
		 $uploadedfile = $_FILES['image_upload'];
		if ( ! function_exists( 'wp_handle_upload' ) ) {
			require_once( ABSPATH . 'wp-admin/includes/file.php' );
		}

		$upload_overrides = array( 'test_form' => false );

		$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );

		if ($movefile && !isset( $movefile['error'] ) ) {

			$filename = $movefile['file'];

			$filetype = wp_check_filetype( basename( $filename ), null );

			$wp_upload_dir = wp_upload_dir();

			$attachment = array(
				'guid'           => $wp_upload_dir['url'] . '/' . basename( $filename ), 
				'post_mime_type' => $filetype['type'],
				'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
				'post_content'   => '',
				'post_status'    => 'inherit'
			);

			$attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id );

			require_once( ABSPATH . 'wp-admin/includes/image.php' );

			$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
			wp_update_attachment_metadata( $attach_id, $attach_data );

			
		} else {
			echo $movefile['error'];
			$error = true;
		}
	}
	if($error == false){
		
				$post_id = wp_insert_post($new_post);
				if(trim($attach_id)){
					set_post_thumbnail($post_id, $attach_id);
				}

		
		$post = get_post($post_id);
		wp_redirect($post->guid);
		exit;
	}
  • Вопрос задан
  • 23 просмотра
Пригласить эксперта
Ответы на вопрос 1
fuck_ask
@fuck_ask Автор вопроса
web программист
А все нашел решение.
Добавил плагин для изменение прав: User Role Editor
Уюрал через него отображение верхней панели и в function.php добавил перенаправление на главную страницу если роль не администраторская.
function only_admin()
{
if ( ! current_user_can( 'manage_options' ) && '/wp-admin/admin-ajax.php' != $_SERVER['PHP_SELF'] ) {
        wp_redirect( site_url() );
		die();
    }
}
add_action( 'admin_init', 'only_admin', 1 );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы