Я работал над функцией AJAX «загрузить больше» для страницы архива категории WordPress, но она немного отличается, поскольку клиенту нужна только «Основная категория», как это установлено плагином Yoast SEO.
У меня он работает правильно при загрузке страницы, но когда пользователь нажимает кнопку «загрузить больше», страница загружает сообщения из всех категорий, а не только из основной категории. Он также загружает сообщения, которые не были назначены категории страницы.
Я использую эту функцию в functions.php, чтобы получить идентификатор категории:
//get cat ID
function getCurrentCatID(){
global $wp_query;
if(is_category()){
$cat_ID = get_query_var('cat');
}
return $cat_ID;
}
Переменная $current_category_ID
найдено с помощью этого, в category.php:
$current_category_ID = getCurrentCatID();
Я использую следующее в файле category.php, чтобы получить первые 10 сообщений при загрузке страницы:
$args = array(
'meta_key' => '_yoast_wpseo_primary_category',
'meta_value' => $current_category_ID,
'posts_per_page' => 10
);
$query = new WP_Query($args);
//output loop
В файле functions.php я затем использую следующее для вывода нового цикла на страницу, проблема в том, что я не могу снова получить идентификатор категории в качестве переменной.
// prepare our arguments for the query
$args = unserialize( stripslashes( $_POST['query'] ) );
$args['paged'] = $_POST['page'] + 1; // we need next page to be loaded
$args['post_status'] = 'publish';
$args['meta_key'] = '_yoast_wpseo_primary_category';
$args['meta_value'] = $cat_ID; //requires variable to be dynamic, hardcoding it works fine
$args['posts_per_page'] = 10;
query_posts( $args );
// new loop
Я пробовал различные методы (слишком много, чтобы вспомнить) во второй функции, используя $_POST['query']
в том числе $cat_ID = $_POST['query']; $cat_ID = $_GET['page_id'];
или же $cat_ID = $_GET['page_id'];
,
Когда я return
переменная для functions.php я всегда получаю значение 0
,
Любой совет по этому вопросу будет принята с благодарностью.
Благодарю.
Я нашел свой ответ в вашем вопросе.
как фильтровать посты только по основной категории: работа для меня
$args = array(
'meta_key' => '_yoast_wpseo_primary_category',
'meta_value' => $current_category_ID,
'posts_per_page' => 10
);
Спасибо 🙂
Других решений пока нет …