如何在父帖子更新时自动更新子帖子?

时间:2018-03-12 作者:SHA3.org

澄清一下,这个问题仅仅是关于如何在保存父帖子时“保存”或“更新”子帖子。没什么了。

大家好,你们这些才华横溢的人。每当父帖子被保存时,我需要自动更新所有子帖子,因为我有一个函数,可以在子帖子被更新时更新类别以匹配父帖子。这应该非常简单。唯一需要注意的是,子帖子与父帖子的帖子类型不同,但它们共享相同的类别分类法(子帖子没有唯一的类别)。我想这可以通过“save\\u post”功能完成。提前感谢!!!非常感谢!!!

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

你好,美丽的WP社区。我设法拼凑出一个解决方案,以防有人需要。我肯定它需要清理一下,但它确实管用。令人敬畏的是,它是多用途的——只要将$args更改为硬编码,即可在更新父帖子时对子帖子中的标记、键、类别、标题、作者、状态、模板或内容进行任何更改。

What it doesn\'t do: 不幸的是,一位无法帮助的狂热用户错误地否决了这个问题,认为它是重复的(事实并非如此)。这completely different function 保存父帖子时,不会自动更新子分类法以匹配父分类法(仍在寻找答案),但同时,您可以将以下函数与this completely different question here 为了实现这一目标。

继续让这个地方变得棒极了!

add_action( \'save_post\', \'update_children\', 10, 2);
function update_children( $post_id, $post ) {

if ( \'trash\' != $post->post_status ){

    // Is a top level post
    if( 0 === $post->post_parent ) {
        $children = array(
            \'post_parent\'   => $post->ID,
            \'post_type\'         => \'any\',   //you can use also \'any\'
            \'fields\'            => \'ids\',   // Only Return IDs
            \'post_status\' => \'publish\',
        );
        global $post;

        if ((is_array($children))&&(!empty( $children ))){
            $the_query = new WP_Query( $children );
        }
        // The Loop
        if ( $the_query->have_posts() ) :
        while ( $the_query->have_posts() ) : $the_query->the_post();
        $mypostids[] = get_the_ID();
        $updatethis = array (
                \'fields\'      => $mypostids,
                \'post_status\' => \'publish\'
        );

        if ((is_array($children))&&(!empty( $children ))) {     
            foreach( $children as $child_ids ) {
                remove_action( \'save_post\', \'update_children\', 10, 2);
                wp_update_post( $updatethis );
                add_action( \'save_post\', \'update_children\', 10, 2);
            }           
        }
        endwhile;
        endif;      
    }
}
}

结束

相关推荐

Functions.php过滤器未应用于AJAX调用

我已经使用php向菜单中添加了一个元素(为了便于说明,简化了代码):add_filter( \'wp_nav_menu_\' . $menu_slug . \'_items\', \'add_menu_item\' , 10, 2 ); function add_menu_item ( $items ) { $item = sprintf(\'<li class=\"custom-item\">%s</li>\', menu_item_content ()