如何将主父页面的自定义字段及其值动态添加到所有子页面?

时间:2013-01-05 作者:Iurie

我有一个主父页面和多个子页面。主父页面有一些自定义字段(元框?)具有特定值。我的目的是向所有子页面动态添加这些自定义字段及其值。我找到了一个解决办法,但没有成功。这可能吗?如何做到这一点?

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

父帖子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

enter image description here

…和子页安全性…

enter image description here

…然后上面的代码将产生以下结果:

enter image description here

回复您的评论:您可以在任何需要的地方使用父贴子元。如果是你,我会过滤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;
}

结束

相关推荐