我有一个自定义的元字段,我想显示为我的摘录。我使用的过滤器可以为我做到这一点:
add_filter( \'get_the_excerpt\', function($output){
$output=get_post_meta(get_the_ID(), \'my_meta_field\', true);
return $output;
});
现在每当我使用
get_the_excerpt()
或
the_excerpt()
在循环内部,我得到
my_meta_field
.
但自WP 4.5.0以来get_the_excerpt()
接受Post ID或WP\\U Post对象作为参数。我希望在使用过滤器时保持此功能不变。
想象一下我想用get_the_excerpt()
循环外部。当我打电话时get_the_excerpt(1234)
(1234是帖子的ID)我得到了错误的摘录,因为get_the_ID()
在我的过滤器里global $post
必须在那一刻提供。
解决这个问题最优雅/有效的方法是什么?我是否可以使用我传递的ID在筛选器中获取\\u摘录?或者我需要创建一个小循环并设置global $post
到get_post(1234)
?
SO网友:Andy Macaulay-Brook
不管《Codex》怎么说,由于WP 4.5在函数get\\u the\\u摘录中添加了post参数,因此该过滤器采用了两个参数。第二个参数是正在处理其摘录的post对象。
因此,该函数仍然在没有显式post的循环中工作,我们将第二个参数设置为可选。
add_filter( \'get_the_excerpt\', \'wpse_242462_excerpt_filter\' );
function wpse_242462_excerpt_filter( $excerpt, $post = null ){
if ( $post ) {
$ID = $post->ID;
} else {
$ID = get_the_ID();
}
$excerpt = get_post_meta( $ID, \'wpse_242462_meta_field\', true);
return $excerpt;
});
希望不用说,您需要替换您已经使用的任何元键。
SO网友:Jonny Perl
即使您不在循环中,如果您在WordPress生成的帖子或页面(或其他帖子类型)中,也会设置$post。所以如果你只是更换get_the_ID()
在上述功能中$post->ID
, 它会起作用的。如果您一直在该页面上运行其他查询,则可能需要运行wp_reset_query();
获取实际的职位ID。
如果要传递特定的post,需要按照以下行将函数与add\\u filter调用分开:
// function to pass the ID to
function my_meta_excerpt($postID){
$output=get_post_meta($postID, \'my_meta_field\', true);
return $output;
}
// add filter call
add_filter( \'get_the_excerpt\', my_meta_excerpt);