WordPress使用dynamic_sidebar函数获取小工具保存到变量
文 / @UTHEME
在某些需求场景下,我们想要获取小工具保存到变量,而不是直接输出结果。dynamic_sidebar()函数用于输出小工具,但不能只返回结果,并且无法通过hook来解决。
目前我采取的解决办法是将dynamic_sidebar()函数的输出放到缓冲区,代码如下:
if(!function_exists('get_dynamic_sidebar')) { function get_dynamic_sidebar($id) { flush(); ob_start(); dynamic_sidebar('content-center'); $html = ob_get_contents(); ob_end_clean(); return $html; } }
有了这个获取小工具的自定义函数,我们就可以通过hook在文章的第N个段落后插入小工具。
首先注册一个名为content-center的小工具:
function bzg_register_widget() { register_sidebar(array( 'name' => '文章内容中', 'id' => 'content-center', 'description' => '', 'class' => '', 'before_widget' => '<div class="ad content-center">', 'after_widget' => '</div>', 'before_title' => '<h3>', 'after_title' => '</h3>', )); } add_action('widgets_init', 'bzg_register_widget');
过滤the_content,在第二个段落后插入小工具:
function bzg_the_content_ad($content) { if(!is_singular() || !is_main_query()) return $content; $content_center = get_dynamic_sidebar('content-center'); if(!$content_center) return $content; $paragraphs = explode('</p>', $content, 3); if(count($paragraphs) == 3) { $content = $paragraphs[0] . '</p>' . $paragraphs[1] . '</p>' . $content_center . $paragraphs[2]; } return $content; } add_filter('the_content', 'bzg_the_content_ad', 10, 1);

相关文章
-
WordPress插件:All in One WP Security & Firewall 怎么样(附:AIOWPS拦截垃圾评论设置教程) 2023-01-26 21:51:51
-
在 PHP 中如何通过一行代码就交换两个变量的值 2023-01-26 00:18:31
-
WordPress主题:Pin Premium (WordPress仿Pinterest样式瀑布流主题) 2023-01-25 23:36:43
-
免费WordPress主题:Maupassant(WordPress中文博客主题) 2023-01-25 23:31:29
-
WordPress响应式图片(Responsive Image)功能关闭:取消WordPress图片宽带和高度参数 2023-01-24 10:49:32
-
wordpress报错:修复MySQL 1064错误问题 错误原因和解决方法 2023-01-24 10:42:04
-
WordPress 实现静态化搜索结果页面的方法 2023-01-24 00:41:44
-
WP Rocket – 强大的WordPress缓存加速优化插件(附:WP Rocket插件设置过程与七折优惠码) 2023-01-24 00:41:44
-
get_permalink、get_the_permalink和the_permalink有啥区别? 2023-01-24 00:41:08
-
为什么选用WordPress搭建独立站? 2023-01-23 20:25:21