我正在处理的 Wordpress 网站有一个“新闻”部分(这是常规博客/帖子),该部分将用于公司必须撰写的任何新闻。然后我有一个促销的自定义帖子类型,它有自己的页面。
我希望客户能够通过“促销”页面上的自定义帖子类型添加他的促销内容,但是我希望此内容也可以“交叉发布”到博客/新闻中,而不会强迫客户写两遍。
有没有办法做到这一点?谢谢。
请注意:我将促销作为自己的自定义类型而不是让它们全部从博客中完成的原因是因为我需要任何其他类型的博客文章都不需要的自定义字段。
我正在处理的 Wordpress 网站有一个“新闻”部分(这是常规博客/帖子),该部分将用于公司必须撰写的任何新闻。然后我有一个促销的自定义帖子类型,它有自己的页面。
我希望客户能够通过“促销”页面上的自定义帖子类型添加他的促销内容,但是我希望此内容也可以“交叉发布”到博客/新闻中,而不会强迫客户写两遍。
有没有办法做到这一点?谢谢。
请注意:我将促销作为自己的自定义类型而不是让它们全部从博客中完成的原因是因为我需要任何其他类型的博客文章都不需要的自定义字段。
两种选择:
在您的交叉帖子中,您将添加短代码[crosspost id="POST-ID"]
。其中POST-ID
对应于其他帖子(帖子类型)的数字 ID。可以使用标题代替 ID,参见函数get_page_by_title
。
为此创建您自己的插件。添加来自 Codex 的示例简码并使用该函数get_post
获取交叉帖子的内容。
有了它,添加带有自定义字段的元框变得轻而易举。它有一个Post Object
基本上是交叉发布功能的字段。
您可以通过向 wp_insert_data() 添加过滤器来更简单地完成此操作。例如,在主题的 functions.php 文件中添加以下内容:
add_filter('wp_insert_post_data', 'post_to_other', 99, 2);
然后,该过滤器将在您添加新帖子时运行。在函数 post_to_other() 中,您可以查看提交的帖子类型。如果是促销,则插入第二个副本作为新闻项目。
function post_to_other($post_id, $post){
/** check $post to see what type it is, if it's a promotion */
if($post->post_type == 'promotion'){
$second_post = array(
'post_type'=> 'post',
'post_title'=> $post->post_title,
'post_name' =>$post->post_name,
'post_content'=> $post->post_content,
'post_author'=> $post->post_author,
'post_status'=> 'publish',
'tax_input'=> array('taxonomy_name'=>array('news'))
);
wp_insert_post($second_post);
}
}
我快跑出去了,所以我没有时间仔细检查确切的代码,但这是它的基本结构。tax_input 位是可选的,可让您根据需要指定类别。您可能需要对其进行一些调整,但这是基础。