根据CPT->页面名称在自定义帖子类型帖子中自动设置POST_PARENT

时间:2012-06-07 作者:INT

我正在尝试编写一个函数,将我的自定义帖子类型与与与自定义帖子类型同名的页面“配对”。

其目的是,当保存自定义帖子类型时,它会检查是否有与自定义帖子类型帖子同名的页面,如果有,它会从该页面提取id,并将其作为CPT帖子的父id。对我来说,保持它们之间的联系是一种很有技巧的方式(自定义帖子类型的帖子从页面继承了不同的值)。

然而,我无法让它工作,它会给我一个id,但它是错误的id(它会获取id最高的页面的id),不确定我做错了什么。

以下是当前代码:

function find_parent_for_cpt( $data , $postarr ) {
    global $post;
    if ($post->post_type != \'post\' || \'page\'){
        $post_type = $post->post_type;

        $mypages = get_pages();
        foreach($mypages as $page){     
            if($page->post_title==$post_type) {
                $data[ \'post_parent\' ] = $page->ID;
                return $data;
            }
        }
    }
}
add_filter( \'wp_insert_post_data\' , \'find_parent_for_cpt\' , \'99\', 2 );

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

你的职能有一些问题。第一$data 包含post类型,因此我们在那里查看。你的if语句不能像那样工作,你必须单独检查条件。要查找匹配的页面,只需使用WP_Query:

function find_parent_for_cpt( $data ) {
    if ( $data[\'post_type\'] != \'post\' && $data[\'post_type\'] != \'page\' ):
        $args = array(
            \'name\' => $data[\'post_type\'],
            \'post_type\' => array( \'page\' )
        );
        $match = new WP_Query( $args );
        if( $match->post_count == 1 )
            $data[ \'post_parent\' ] = $match->post->ID;
    endif;
    return $data;
}
add_filter( \'wp_insert_post_data\' , \'find_parent_for_cpt\' , \'99\', 2 );
还要注意,无论是否修改,都必须返回post数据。您可能会遇到的另一个问题是,除了post和page之外,还有其他post类型不是您的自定义类型,我假设此操作会被触发。最好显式测试自定义类型,以决定是否分配父类型。

结束

相关推荐

WordPress主题需要默认的PHP文档/名称吗?

我正在托管我自己版本的Wordpress,我想为它做一个自定义主题以适合我的网站。然而,互联网上有这么多零碎的例子,我真的不确定我应该有多少PHP文档,以及它们在主题中的名称。到目前为止,我只知道Wordpress主题本身中有以下PHP文档:404.php comments.php footer.php functions.php header.php index.php page.php sidebar.php single.php