使用自定义页面(post类型page
) 和acustom Page Template, 您可以这样做:
在模板中,创建WP_Query
用于查询罗马尼亚语或英语的帖子。
查询/函数参数中的WP_Query
和wp_get_archives()
, 使用名为lang
定义语言slug-ro
对于罗马尼亚人,en
对于英语-用于仅包括帖子或具有帖子开头的文档<language slug>-
, e、 g。ro-
.
代码
The custom Page template:
请注意,我对罗马尼亚语和英语版本使用了相同的代码,除了
lang
当然设置为相应的语言slug。如果需要,可以使用自定义元数据(例如。
_lang
) <对于页面,只需使用一个模板即可使用所有语言,但您需要自己实现。
所以在我的测试站点上,我有以下页面:
RO存档(/ro-archive/
) 使用template-ro-archive.php
样板
电子存档(/en-archive/
) 使用template-en-archive.php
样板
<?php
// I\'m only including the main content, but make sure your template contains
// the Template Name header and the calls to get_header() and get_footer().
?>
<ul>
<?php wp_get_archives( [
\'lang\' => \'ro\',
] ); ?>
</ul>
<?php
$paged = max( 1, get_query_var( \'paged\' ) );
// Query the posts.
$query = new WP_Query( [
\'lang\' => \'ro\',
\'paged\' => $paged,
\'posts_per_page\' => 10,
] );
// Display the loop.
while ( $query->have_posts() ) :
$query->the_post();
// .. your code here.
endwhile;
// And a pagination.
echo paginate_links( [
\'current\' => $paged,
\'total\' => $query->max_num_pages,
] );
// Lastly, restore the global $post variable.
wp_reset_postdata();
?>
实际上,你也可以制作模板
specific to the respective Page, e、 g.使用名称
page-ro-archive.php
而不是
template-ro-archive.php
.
The query filter for WP_Query
, using the posts_where
hook:
<这个代码应该放在主题的函数文件中// Include only the posts where the slug begins with <language-slug>- like ro-
add_filter( \'posts_where\', function ( $where, $query ) {
if ( ! is_admin() && $lang = $query->get( \'lang\' ) ) {
global $wpdb;
$where .= $wpdb->prepare(
" AND {$wpdb->posts}.post_name LIKE %s",
$lang . \'-%\'
);
}
return $where;
}, 10, 2 );
The query filter for wp_get_archives()
, using the getarchives_where
hook:
<这个代码应该放在主题的函数文件中// Include only archives having posts where the slug begins with
// <language-slug>- like ro-
add_filter( \'getarchives_where\', function ( $where, $parsed_args ) {
if ( ! is_admin() && ! empty( $parsed_args[\'lang\'] ) ) {
global $wpdb;
$where .= $wpdb->prepare(
" AND post_name LIKE %s",
$parsed_args[\'lang\'] . \'-%\'
);
}
return $where;
}, 10, 2 );
替代解决方案
使用自定义分类法,例如。lang
, 用于您的文章/帖子。这样,你就可以得到条件ro
(罗马尼亚)和en
(英语),那么您将在/lang/ro
和/lang/en
. 而且,您可以有一个单一的标准模板(即。taxonomy-lang.php
) 对于那些档案。但是
您需要将所有文章分配给正确的lang
期限您仍然需要使用lang
参数/过滤器wp_get_archives()
.