我想检查一篇文章是否有以下短代码之一: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\');
任何帮助都将不胜感激。
非常感谢你!
最合适的回答,由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\' );