如何检查一篇帖子是否有许多短码中的任何一个?

时间:2020-07-17 作者:battx726

我想检查一篇文章是否有以下短代码之一:wpdocs-shortcode-1、wpdocs-shortcode-2、wpdocs-shortcode-3。如果它发现了这些短代码中的任何一个,则将脚本和样式排入队列。

基本上这段代码是有效的。

    function wpdocs_shortcode_scripts() {
      global $post;
      if ( is_a( $post, \'WP_Post\' ) && has_shortcode( $post->post_content, \'wpdocs-shortcode\') ) {
       wp_enqueue_script( \'wpdocs-script\');
      }
   }
   add_action( \'wp_enqueue_scripts\', \'wpdocs_shortcode_scripts\');
我想要实现的是检查多个短代码。我通过传递数组尝试了以下代码,但没有成功。

 function wpdocs_shortcode_scripts() {
  global $post;
  if ( is_a( $post, \'WP_Post\' ) && has_shortcode( $post->post_content, array(\'wpdocs-shortcode-1\', \'wpdocs-shortcode-2\', \'wpdocs-shortcode-3\') ) {
   wp_enqueue_script( \'wpdocs-script\');
  }
 }
add_action( \'wp_enqueue_scripts\', \'wpdocs_shortcode_scripts\');
任何帮助都将不胜感激。

非常感谢你!

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

所以是的,正如您所说,您不能将数组传递给has_shortcode, 已在中确认the docs, 因此,您需要手动执行“或”操作,如下所示:

$shortCodesToTest = [ \'wpdocs-shortcode-1\', \'wpdocs-shortcode-2\', \'wpdocs-shortcode-3\'];

$anyShortCode = false;

foreach ($shortCodesToTest as $sc) {
    if (has_shortcode( $post->post_content, $sc) ) {
        $anyShortCode = true;
    }
}
现在使用$anyShortCode 随您的喜好而变化-它将是True 如果找到任何短代码。例如:

if ( is_a( $post, \'WP_Post\' ) && $anyShortCode ) {
    wp_enqueue_script( \'wpdocs-script\');
}

SO网友:Kevin

你可以在快捷方式中循环,然后在命中时将某个对象放入数组。

如果数组末尾不是空的,则可以加载脚本。

<?php
function wpdocs_shortcode_scripts() {
    global $post;

    $shortcodes = [ \'wpdocs-shortcode-1\', \'wpdocs-shortcode-2\', \'wpdocs-shortcode-3\' ];

    $found = [];

    foreach ( $shortcodes as $shortcode ) :
        if ( is_a( $post, \'WP_Post\' ) && has_shortcode( $post->post_content, $shortcode ) ) {
            $found[] = $shortcode;
        }
    endforeach;

    if ( ! empty( $found ) ) {
        wp_enqueue_script( \'wpdocs-script\' );
    }
}
add_action( \'wp_enqueue_scripts\', \'wpdocs_shortcode_scripts\' );

相关推荐

What does this shortcode do?

function my_shortcode($atts, $content = null){ extract(shortcode_atts(array(\"type\" => \"warrning\"), $atts)); return \".$content.\"; } add_shortcode(\"warrning_dialog\", \"my_shortcode\"); 我知道它会创建短代码[warning\\u dialo