父帖子ID存储在$post->post_parent
. 因此,您可以在中使用该ID访问父数据get_post_meta()
.
要让祖先使用get_post_ancestors( $post->ID )
. 它返回一个父ID数组,最后一个是最高的。让我们为下面的示例创建一个助手函数:
if ( ! function_exists( \'get_top_ancestor\' ) )
{
function get_top_ancestor( $post_id )
{
$ancestors = get_post_ancestors( $post_id );
return empty ( $ancestors ) ? $post_id : end( $ancestors );
}
}
现在,我们可以在过滤器中使用该辅助对象
the_content
:
add_filter( \'the_content\', \'wpse_78325_parent_meta\' );
function wpse_78325_parent_meta( $content )
{
global $post;
if ( ! is_page() or empty ( $post->post_parent ) )
return $content;
$top_id = get_top_ancestor( $post->ID );
if ( ! $data = get_post_meta( $top_id, \'demo_data\', TRUE ) )
return $content;
$extra = sprintf(
\'<p>Meta data <code>demo_data</code> from <a href="%1$s">parent post</a>:</p>
<pre>%2$s</pre>\',
get_permalink( $top_id ),
esc_html( $data )
);
return $extra . $content;
}
假设您有一个带有自定义字段的父页隐私策略
demo_data
…
…和子页安全性…
…然后上面的代码将产生以下结果:
回复您的评论:您可以在任何需要的地方使用父贴子元。如果是你,我会过滤wp_nav_menu_args
和电话wp_nav_menu
使用静态字符串menu
.
示例代码,未测试,只是草稿。:)
add_filter( \'wp_nav_menu_args\', \'wpse_78325_parent_menu_name\' );
function wpse_78325_parent_menu_name( $args )
{
if ( \'primary\' !== $args[\'theme_location\'] or ! is_page() )
return $args;
global $post;
$top_id = get_top_ancestor( $post->ID );
/* prepend this line with a # to switch the logic
if ( ! $name = get_post_meta( $top_id, \'MenuName\', TRUE ) )
return $args;
$args[\'menu\'] = $name;
/*/
foreach ( $args as $key => $value ) // you can use custom keys here
{
if ( $new = get_post_meta( $top_id, \'MenuName\', TRUE ) )
{
$args[ $key ] = $new;
unset ( $new );
}
}
/**/
return $args;
}