@svkalashnikov

Как сделать подписку на категории и теги как на хабре на wordpress?

Здравствуйте.
Хочу на wordpress сделать функционал подписки на категории, теги и иные таксономии (наподобие того, как сделано на хабре). Т.е. если пользователь залогинен, то его лента постов формируется из тех категорий и тегов, на которые он подписан.
Для этого для пользователя добавил поле, в котором хранятся идентификаторы категорий (думаю, для тегов и иных таксономий подход будет таким же). Формирование ленты постов на основании этого поля проходит корректно, но не получается сделать кнопку подписки на категорию, отображаемую на странице категории и реализующую добавление идентификатора категории, на которой она нажата, в поле пользователя.
Примерный код category.php следующий:

get_header(); ?>

	<main id="main" class="site-main col-md-9 col-md-push-3" role="main">

		<?php if ( have_posts() ) : ?>

			<header class="page-header">
				<?php
					the_archive_title( '<h1 class="page-title">', '</h1>' );
				?>
			<form method = "post">
				<input type = "submit" name = "button1" value = "Подписаться">
			<form>
			<?php
				if($_POST['button1']) { 
					$user_ID = get_current_user_id();
					$NewCategoryID = get_the_category();
					$NewCategories =  the_author_meta('user_categories').','.$NewCategoryID->cat_ID;
					update_user_meta( $user_ID, 'user_categories', $NewCategories );				}
			?>
			</header><!-- .page-header -->

			<div id="posts-container">
			......


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

UPDATE:
Получилось сделать добавление номера категории в пользовательское поле. Но не удается завести это действие на кнопку. Т.е. есть кнопка:
<input name="action" type="hidden" id="action" value="update-user" />

Обработчик кнопки такой:
if ( isset( $_POST['action'] ) ) {
        	                	$NewCategoryID = get_the_category();        
        	                	$user_info = get_the_author_meta('user_categories',$current_user->ID);
                $NewUserCategories = $user_info.','.$NewCategoryID[0]->term_id;
                update_usermeta( $current_user->ID, 'user_categories', $NewUserCategories);					
        	                }

В поле профиля пользователя 'user_categories' хранятся идентификаторы категорий, которые этот пользователь должен видеть, через запятую.
При нажатии на кнопку открывается первый пост категории, на странице которой была нажата кнопка. При этом добавление идентификатора 'user_categories' этой категории в поле не происходит.
  • Вопрос задан
  • 624 просмотра
Решения вопроса 1
@svkalashnikov Автор вопроса
Так и не понял, почему осуществляется редирект. Сделал костылем. При открытии страницы с постом осуществляется редирект обратно на страницу с категорией.
Часть кода в single.php:

if ( $_POST['action'] == 'update-user' )  {
	//var_dump($_POST['action']);


	if (!($_POST['updateuser'] == 'Отписаться')) {


	$NewCategoryID = get_the_category();       
	$user_info = get_the_author_meta('user_categories',$current_user->ID);
	$NewUserCategories = $user_info.','.$NewCategoryID[0]->term_id;
	update_usermeta( $current_user->ID, 'user_categories', $NewUserCategories);

	$LinkToPage=get_category_link($NewCategoryID[0]->term_id);
	wp_redirect( $LinkToPage );
	exit;
		} else {
			$NewCategoryID = get_the_category();       
			$user_info = get_the_author_meta('user_categories',$current_user->ID);			

			$intNumCategory = strpos($user_info, (string)$NewCategoryID[0]->term_id);
                        
			if ($intNumCategory == 0) {
					$StrNewCategoryID = $NewCategoryID[0]->term_id.',';
			} else {
					$StrNewCategoryID = ','.$NewCategoryID[0]->term_id;
				}
		
			$NewUserCategories = str_replace($StrNewCategoryID,'',$user_info);
			update_usermeta( $current_user->ID, 'user_categories', $NewUserCategories);

			$LinkToPage=get_category_link($NewCategoryID[0]->term_id);
			wp_redirect( $LinkToPage );
			exit;
		}
	}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы