根据子页面动态添加操作(用于主页控制)

时间:2018-05-07 作者:chrisbergr

我正在使用插件homepage control 在许多项目中,我非常喜欢它所做的。我可以为我的静态主页创建自定义部分,并可以在customizer中对它们进行排序。在我最近的客户项目中,我认为根据我主页的子页面创建此类分区是一个好主意-我完全失败了。首先,我尝试使用变量函数名,但无法使用add\\u操作访问函数。然后我尝试在add\\u操作调用中使用匿名函数,但现在我无法将内容变量传递给它。

也许我的整个方法都走错了方向,有人给我一个提示或更好的解决方案吗?

提前谢谢。

if ( ! function_exists( \'homepage_content\' )  ) {
    function homepage_content() {

        $the_id = 5;
        $item = get_post( $the_id );

        $page_tree_array = get_pages( array(
            \'child_of\' => $the_id
        ) );

        foreach( $page_tree_array as $item ) {

            $id = $item->ID;
            $slug = $item->post_name;
            $title = apply_filters( \'the_title\', $item->post_title );
            $content = apply_filters( \'the_content\', $item->post_content );

            $function_name = \'homepage_section_\' . $slug;

            add_action( \'homepage\', function() {
                ?>
                <article id="post-<?php echo $id; ?>" <?php post_class( \'homepage-content\' ); ?>>

                    <h1><?php echo $title; ?></h1>
                    <?php echo $content; ?>

                </article>

                <?php
            }, 60 );

        }

    }
}

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

使用add_action() 对我来说似乎有些倒退。一个更好的方法是上钩homepage_content() 进入homepage 钩子,然后只输出一个钩子内的每个部分:

function homepage_content() {
    $the_id = 5;
    $item = get_post( $the_id );

    $page_tree_array = get_pages( array(
        \'child_of\' => $the_id
    ) );

    foreach( $page_tree_array as $item ) {
        $id = $item->ID;
        $slug = $item->post_name;
        $title = apply_filters( \'the_title\', $item->post_title );
        $content = apply_filters( \'the_content\', $item->post_content );
        ?>

        <article id="post-<?php echo $id; ?>" <?php post_class( \'homepage-content\' ); ?>>
            <h1><?php echo $title; ?></h1>
            <?php echo $content; ?>
        </article>

        <?php
    }
}
add_action( \'homepage\', \'homepage_content\' );
您还可以进行一些其他更改,这也会有所帮助,但我没有重点介绍add_action():

使用动态获取主页IDget_option( \'page_on_front\' ).

  • 设置$itemget_post() ID的值似乎没有必要,因为您从未使用过它
  • 使用setup_postdata() 对于每个部分,您可以使用模板标记,如the_title()the_content(). setup_postdata() 也就是说,您可以将主页部分模板放入一个单独的文件中,并使用get_template_part().考虑到所有这些因素homepage_content() 函数如下所示:

    function homepage_content() {
        global $post;
    
        $child_pages = get_pages( array(
            \'child_of\' => get_option( \'page_on_front\' ),
        ) );
    
        foreach ( $child_pages as $post ) {
            setup_postdata( $post );
            get_template_part( \'partials/homepage-content\' );
        }
    
        wp_reset_postdata();
    }
    add_action( \'homepage\', \'homepage_content\' );
    
    然后创建partials/homepage-content.php 作为每个部分的模板。自从setup_postdata() 您可以使用适当的模板标记:

    <article id="post-<?php the_ID(); ?>" <?php post_class( \'homepage-content\' ); ?>>
        <h1><?php the_title(); ?></h1>
        <?php the_content(); ?>
    </article>
    

    结束

    相关推荐

    Link to Homepage in Menu

    我在中使用mh newsdesk lite wordpress主题one of my client\'s websites 我想在菜单中找到主页的链接。理想情况下,它可以在没有php或任何代码的情况下完成,但我一直在寻找not 想让我的主页静态,因为我有最新的帖子。提前感谢您!