在内容之后添加的内容的HAS_SHORT代码

时间:2017-04-05 作者:Tammy

我使用过滤器在内容之后添加了一些短代码,如下所示:

add_filter( \'the_content\', \'image_posts\' );
但现在我跑了has_shortcode 在另一个函数中,即使存在短代码(使用上述过滤器添加),也会返回false。

add_action( \'wp_head\', \'gallery_style\');
function gallery_style(){
  if ( has_shortcode( $content, \'gallery\' ) ) {
     // enqueue style
     // it fails for posts which add gallery using the_content
  }
如何测试has_shortcode 对于使用add\\u filter添加的内容?

2 个回复
SO网友:Ian

为此,您实际上需要利用wp_enqueue_scripts 操作而不是wp_head.

wp_enqueue_scripts 从技术上讲,是向站点添加脚本和样式的正确方法。此操作允许我们注册脚本和样式以供以后使用(这是我们在这里想要的),并允许我们将脚本和样式输出到页面,而无需硬编码。这也很重要,因为wp_head 之前运行the_content 这意味着一旦代码到达the_content.

首先,让我们使用wp_enqueue_scripts 行动

/**
 * Register the gallery stylesheet for later use if our content contains the gallery shortcode.
 */
function enqueue_gallery_style(){
        wp_register_style(\'gallery_style\', get_stylesheet_directory_uri() . \'/assets/css/gallery.css\');
}
add_action(\'wp_enqueue_scripts\', \'enqueue_gallery_style\'); // register with the wp_enqueue_scripts action
我们使用wp_register_style 作用在这种情况下,我们将使用前两个参数。第一个是我们要为样式命名的名称,以便稍后使用。你可以给它起任何名字。在这里,我将其命名为“gallery\\u style”。第二个参数是主题或插件中样式表的url路径(请确保根据特定路径进行更新)。以下是有关wp_register_style

现在我们可以添加另一个the_content 除了您的image_posts 筛选以执行短代码条件检查。在支票内,如果我们找到它,那么我们运行wp_enqueue_style 函数将我们的图库样式排队,并将其添加到该特定页面。

/**
 * This function is used to check the_content to see if it contains any shortcodes
 *
 * @param $content
 *
 * @return string
 */

function shortcode_check( $content ) {

    if ( has_shortcode( $content, \'gallery\' ) ) {
        wp_enqueue_style( \'gallery_style\' ); // this is the same name we gave our gallery style when we registered it.
    }

    return $content; // Make sure you still return your content or else nothing will display.
}
add_filter( \'the_content\', \'shortcode_check\' );
有关的详细信息wp_enqueue_style

Method if you are trying to add admin-generated styles (eg. from customizer or other settings) that won\'t have a physical file.

如果需要输出通过管理员生成的样式(即颜色),可以使用wp_add_inline_style 作用

此函数允许您将样式添加到已注册的样式表中。就我们已经注册的画廊而言。上面的css文件,我们可以添加wp_add_inline_style( \'gallery_style\', $user_css ); 它将在注册样式表之后立即将其添加为内联样式。

在这里$user_css 将样式作为字符串without 这个<style> 包装器。

因此,在您的示例中,您可以使用一些基本样式为gallery注册样式表,然后使用此函数添加将覆盖这些基本样式的样式。

function shortcode_check( $content ) {
    if ( has_shortcode( $content, \'gallery\' ) ) {
        wp_enqueue_style(\'gallery_style\');
        wp_add_inline_style( \'gallery_style\', $user_css ); // this will add our inline styles. Make sure to sanitize!!!
    }

    return $content; // Make sure you still return your content or else nothing will display.
}
更多关于wp_add_inline_style

SO网友:Nathan Johnson

实际上,您可以将任何挂钩中的样式和脚本排队。如果wp_head() 已激发,则样式和/或脚本将排入页脚队列。

//* Add filter to the_content
add_filter( \'the_content\', \'wpse_262484_the_content\' );
function wpse_262484_the_content( $content ) {

  //* Maybe do something useful with $content

  //* Enqueue style if the content has gallery shortcode
  //* Since wp_head() has already fired, this will be output in the footer
  if ( has_shortcode( $content, \'gallery\' ) ) {
    wp_enqueue_style( \'wpse-262484\', PATH_TO . \'style.css\' );
  }
  return $content;
}

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗