如何扩展 TimberPost
How to extends a TimberPost
可能是什么明显的东西,从我眼皮子底下跑掉了。
我不明白如何将我的扩展 class 挂接到木材上。
让我们以问题为例。我怎样才能在调用 Timber::query_post()
时得到像 MySitePost
这样的对象?
So now I’ve got an easy way to refer to the {{ post.issue }}
in our twig templates.
Looks like an automatic process... but I'm not so sure about this!
我认为这是一个很好的问题,可能不是那么明显。
要使用自定义 post,您通常会在获取 post 时找到一个参数,您可以在其中传递自定义 class 的名称。返回的对象将成为您自定义 class.
的实例
$posts = Timber::get_posts( $your_args, 'MySitePost' );
$posts = new Timber\PostQuery( $your_args, 'MySitePost' );
当您想要获取单个 post 时,其工作方式非常相似。您可以直接实例化您的 post 或将您的 post class 传递给函数。
$post = new MySitePost();
$post = Timber::get_post( $post_id, 'MySitePost' );
如果您想要为您的 post 设置默认值 class,您可以使用 Timber\PostClassMap
过滤器:
// Use one class for all Timber posts.
add_filter( 'Timber\PostClassMap', function( $post_class, $post_type ) {
return 'MySitePost';
}, 10, 2 );
// Use default class for all post types, except for pages.
add_filter( 'Timber\PostClassMap', function( $post_class, $post_type ) {
// Bailout if not a page
if ( 'page' !== $post_type ) {
return $post_class;
}
return 'MySitePost';
}, 10, 2 );
// Use a class map for different post types
add_filter( 'Timber\PostClassMap', function( $post_class, $post_type ) {
return array(
'post' => 'MySitePost',
'apartment' => 'MyApartmentPost',
'city' => 'MyCityPost',
);
}, 10, 2 );
可能是什么明显的东西,从我眼皮子底下跑掉了。
我不明白如何将我的扩展 class 挂接到木材上。
让我们以问题为例。我怎样才能在调用 Timber::query_post()
时得到像 MySitePost
这样的对象?
So now I’ve got an easy way to refer to the
{{ post.issue }}
in our twig templates. Looks like an automatic process... but I'm not so sure about this!
我认为这是一个很好的问题,可能不是那么明显。
要使用自定义 post,您通常会在获取 post 时找到一个参数,您可以在其中传递自定义 class 的名称。返回的对象将成为您自定义 class.
的实例$posts = Timber::get_posts( $your_args, 'MySitePost' );
$posts = new Timber\PostQuery( $your_args, 'MySitePost' );
当您想要获取单个 post 时,其工作方式非常相似。您可以直接实例化您的 post 或将您的 post class 传递给函数。
$post = new MySitePost();
$post = Timber::get_post( $post_id, 'MySitePost' );
如果您想要为您的 post 设置默认值 class,您可以使用 Timber\PostClassMap
过滤器:
// Use one class for all Timber posts.
add_filter( 'Timber\PostClassMap', function( $post_class, $post_type ) {
return 'MySitePost';
}, 10, 2 );
// Use default class for all post types, except for pages.
add_filter( 'Timber\PostClassMap', function( $post_class, $post_type ) {
// Bailout if not a page
if ( 'page' !== $post_type ) {
return $post_class;
}
return 'MySitePost';
}, 10, 2 );
// Use a class map for different post types
add_filter( 'Timber\PostClassMap', function( $post_class, $post_type ) {
return array(
'post' => 'MySitePost',
'apartment' => 'MyApartmentPost',
'city' => 'MyCityPost',
);
}, 10, 2 );