小部件插件可以/应该定义自己的小部件区域吗?

时间:2012-12-21 作者:Jon

插件是否应该能够在\\u内容上方添加小部件区域?(无需更改模板/主题。)下面的代码做了一些事情,但似乎有缺陷:测试表明没有解析短代码,所以我添加了do\\u短代码。

function insert_above_content_widget($content) {

if ( !function_exists(\'dynamic_sidebar\') || !dynamic_sidebar(\'Above Content\') ) : 
endif;

echo do_shortcode($content);

}

add_filter( \'the_content\', \'insert_above_content_widget\' );
看起来能够做到这一点是很有用的,但不知怎么的,这种方法感觉不太对。有人看到什么问题吗?

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

有人看到什么问题吗?

您所做的并不是在wp admin->Widgets(我测试过)的后端创建一个侧栏面板,所以无论如何,您都不能像widgetized侧栏那样使用侧栏。您必须以编程方式将小部件添加到侧栏中,但如果要这样做,为什么还要使用侧栏呢?为什么不在帖子内容的顶部添加您想要的标记并完成它呢?我不理解这种开销的必要性。

是的,短代码无法工作,因为您已使筛选过程短路。通过回声$content 您没有返回它,而是干扰了在内容最终被回显之前应该运行的其余过滤器。do_shortcode 不是唯一需要更换的,但不要这样做return $content.

过滤器内部的回声似乎起作用,但我不会轻易休息。有些方法可能会出错。我担心有人会这样做:

$content = get_the_content();
$content = \'abc\'.$content.\'def\';
$content = apply_filters(\'the_content\',$content);
想象一下,有人在页面加载的早期,甚至在发送页眉之前就这样做了?(可能将内容用作元描述或其他什么?)你的内容在一个非常错误的地方回响。它还可以打破通过AJAX获取内容的尝试。JSON非常挑剔。

我想到的其他事情。。。

如果您回送内容而不是返回内容,那么您实际上是在打破任何其他挂钩the_content.

也有可能其他插件会在您的插件之前挂起,甚至更早地响应某些内容,可能会违反您的意图,并进一步将设计搞得一团糟。

我不想讨论你是否应该在内容之前插入侧边栏,但我很确定你不应该这样做。

结束

相关推荐

Apply_Filters()和_Excerpt提供了意外的结果

我觉得我一定错过了一些显而易见的东西,但我似乎无法让WordPress合作。我正在用一个函数生成Facebook OG标签。除了摘录,一切都很好。自get_the_excerpt($post->ID), 有没有其他方法可以创建摘录而不必创建一个全新的循环?我觉得这太过分了。我的第一反应是apply_filters():$description = apply_filters(\'the_excerpt\', get_post($post->ID)->post_content);