我需要你的recommendation for the best practice 此处:
我创建的自定义帖子类型需要在帖子内容末尾列出一个附件列表我创建了一系列函数,用于显示帖子的相应附件列表我不想使用快捷码插入这个附件列表,因为这种类型的每一篇文章都应该有这个列表,我正在寻找一种可移植的、可重用的方法,我最初的方法是将附件功能封装到一个独立的插件中。但是如果我不使用shortcode,如何将插件输出集成到页面中呢?
我的解决方案是创建自己的伪模板标记(“the\\u attachments()”),该标记在插件中定义。然后是我的自定义帖子类型。php模板页面在\\u content()之后使用这个伪模板标记,我们得到了一个很好的列表。
但这真的是最好的方法吗?现在我们有了一个依赖于外部插件的模板。如果插件不存在,模板将“中断”。从模板的角度来看,很难“要求”插件,因为is\\u plugin\\u active()仅在管理级别可用,这可能是有原因的(因为让模板依赖于插件是一个愚蠢的想法!)
因此,我只剩下以下两种选择:A)将插件输出与模板分离,类似于小部件的工作方式(如果是这样,我如何将$post信息传递给该小部件?),orB)在模板函数中嵌入“插件”代码(但这真的是可移植的吗?)
最合适的回答,由SO网友:kaiser 整理而成
<?php
// A)
// inside your template
if ( function_exists( \'the_attachment_stuff()\' ) )
{
// do stuff
}
// better/faster
if ( class_exists( \'attachment_plugin_class\' ) )
{
// do stuff
}
// B)
// inside your template
do_action( \'the_attachment_suff\');
// means setting this inside your plugin
// this avoids throwing errors or aborting if the hook isn\'t in your template
add_action( \'the_attachment_stuff\', \'your_callback_fn\' );
// C)
function add_attachment_stuff()
{
if ( ! is_admin() )
return;
// the following is guess and theory...
$content = get_the_content();
$content .= the_attachment_stuff(); // in case the attachment_stuff returns instead of echos the result/output.
}
// @link http://codex.wordpress.org/Plugin_API/Action_Reference
// only add on publish, on \'post_save\' we would add it multiple times
add_action( \'publish_post\', \'add_attachment_stuff\', 100 );
add_action( \'publish_phone\', \'add_attachment_stuff\', 100 );