使用PolyLang按类别和语言获取文章

4

我正在创建一个插件,我已经能够使用WordPress的get_posts()函数通过分类和当前语言获取帖子,并通过使用PolyLang的pll_current_language()传递属性lang。

$args = array(
    'posts_per_page'   => 6,
    'orderby'          => 'date',
    'order'            => 'DESC',
    'post_type'        => 'post',
    'post_status'      => 'publish',
    'lang'             => pll_current_language()
);
return get_posts($args);

现在,我想知道如何按语言相关的类别获取帖子?例如,我有英文的新闻类别和西班牙语的Noticias。如何自动设置?
就像这样:
$args = array(
    ......
    'category' => **current_category_for_this_language**
    ......
);
return get_posts($args);

有什么想法吗?
1个回答

7

使用pll_get_term并按类别进行过滤。在这种情况下,“34”是我的术语ID(通过悬停在术语的编辑链接上获得)。

顺便说一句,据我所知,默认情况下get_posts仅获取当前页面语言的帖子,并且默认按日期DESC排序获取帖子,因此您可以从查询中省略它们。

$args = array(
  'posts_per_page'   => 6,
  'category'         => pll_get_term(34)
);
return get_posts($args);

来源

https://polylang.wordpress.com/documentation/documentation-for-developers/functions-reference/

pll_get_term

Returns the category (or post tag) translation

Usage:

pll_get_term($term_id, $slug);

‘$term_id’ => (required) id of the term you want the translation

‘$slug’ => (optional) 2-letters code of the language, defaults to current language

https://codex.wordpress.org/Template_Tags/get_posts

Default Usage

<?php $args = array(
  'posts_per_page'   => 5,
  'offset'           => 0,
  'category'         => '',
  'category_name'    => '',
  'orderby'          => 'date',
  'order'            => 'DESC',
  'include'          => '',
  'exclude'          => '',
  'meta_key'         => '',
  'meta_value'       => '',
  'post_type'        => 'post',
  'post_mime_type'   => '',
  'post_parent'      => '',
  'author'       => '',
  'author_name'      => '',
  'post_status'      => 'publish',
  'suppress_filters' => true 
);
$posts_array = get_posts( $args ); ?>

2
讲解不能再好了!非常感谢,Joris! - Italo Borges
很棒的解决方案,对于自定义分类法帮助了我很多。'tax_query' => array(array('taxonomy' => 'taxonomy-slug', 'field' => 'term_id', 'terms' => pll_get_term(34))) - Gendrith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接