操纵插件短码

时间:2012-09-07 作者:Pascal Rosin

我想在内容的正下方添加一些javascript,由另一个插件的短代码添加。

我们正在使用NextGen Gallery插件,许多文章都包含了[nggallery]短代码。我不想更改所有文章,也不想通知所有作者将来使用另一个短代码。我也不想修改原来的插件。

是否有方法修改短代码,如:

function put_script_after_nggallery_shortcode( $atts ){
 return "[nggallery $atts] <script>foo();</script>";
}
add_shortcode( \'nggallery\', \'put_script_after_nggallery_shortcode\' );
或者我应该以某种方式钩住\\u content()的呈现过程,将脚本直接放在[nggallery id=nnn]之后的\\u内容字符串中。这可以通过对\\u内容进行筛选来完成吗?

2 个回复
SO网友:helgatheviking

你可以

remove_shortcode( \'nggallery\' );
然后再次添加:

function put_script_after_nggallery_shortcode( $atts ){
 global $nggShortcodes;
 $nggShortcodes->show_gallery($atts); //or otherwise duplicate the callback function
 wp_enqueue_script(\'special-ngg-sciprt\', \'url-to-script\', null, null, true);

}
add_shortcode( \'nggallery\', \'put_script_after_nggallery_shortcode\' );
我不确定我的show\\u gallery能否正常工作,但似乎合乎逻辑

您需要添加什么脚本?为什么不单独使用wp\\u enqueue\\u脚本?没有任何理由让脚本代码内联。

EDIT #1

由于$nggShortcodes显然不是全局变量,我们可以尝试使用对象表示法。。。如果这不起作用,您也可以复制NextGen的gallery快捷码回调的内容。此外,我还添加了一个类检查,以确保在NextGen被停用时不会破坏您的站点。

function put_script_after_nggallery_shortcode( $atts ){
   if( ! class_exists(\'NextGEN_Shortcodes\')) return;
   NextGEN_Shortcodes->show_gallery($atts); //or paste in the callback function
 ?>

  <script type="text/javascript">
   jQuery(document).ready(function($) {
     alert(\'bacon\');
   });

   </script>

 <?php
}
add_shortcode( \'nggallery\', \'put_script_after_nggallery_shortcode\' );

SO网友:Nathan Johnson

由于WordPress 4.7,您可以使用do_shortcode_tag 滤器

add_filters( \'do_shortcode_tag\', \'wpse_106269_do_shortcode_tag\', 10, 4 );
function wpse_106269_do_shortcode_tag( $output, $tag, $attr, $m ) {
  if( $tag === something ) {
    //* Do something useful
  }
  return $output;
}

结束

相关推荐

Shortcode Strategy

我希望将另一个数据库中的数据插入到我的帖子中,并考虑使用短代码。示例帖子:[imdb id=\"123\" name] was born [imdb id=\"123\" birthday] in [imdb id=\"123\" birth_location]. 我想缓存结果,一旦检索到,就不需要再运行短代码操作了。有没有什么好的策略可以让这种事情更有效率?