好吧,我想把这个贴在这里,因为你的问题的标题。
有一种方法可以更改短代码属性,但它也将取决于插件的开发人员所做的工作。当使用短代码开发插件时,可以选择使用shortcode_atts()
作用我想说的是,大多数情况下都会发生这种情况,但有些人不知道有一种方法可以通过过滤器对其进行修改。在大多数插件中,您会看到如下内容:
shortcode_atts( array(
\'name\' => get_bloginfo( \'title\' ),
\'description\' => \'\',
), $atts );
这是很常见的,但是还有一个属性可以使用:
shortcode_atts( array(
\'name\' => get_bloginfo( \'title\' ),
\'description\' => \'\',
), $atts, \'shortcode_name\' );
请参见
shortcode_name
作为参数添加的?这会在WordPress中创建一个过滤器,供其他人使用。现在为其添加筛选器的格式如下所示:
add_filter( \'shortcode_atts_shortcode_name\', \'do_something\', 10, 3 );
因此,我们可以创建一个实际的过滤器函数,如下所示:
function do_something( $out, $pairs, $atts ) {
if( empty( $out[\'name\'] ) ) {
$out[\'name\'] = \'This will never be empty now\';
}
return $out;
}
add_filter( \'shortcode_atts_shortcode_name\', \'do_something\', 10, 3 );
参考文献:
https://codex.wordpress.org/Function_Reference/shortcode_attshttp://hookr.io/4.1.1/filters/shortcode_atts_shortcode/
好的,所以我写了这篇文章,以防其他人根据你的标题访问此页面。
我认为您的问题有点不同,而且WC似乎没有设置允许我上面解释的过滤器。
查看您指出的代码,似乎有一个可以挂接的动作挂钩:<?php do_action( "woocommerce_shortcode_before_{$loop_name}_loop" ); ?>
如果你能找出$loop_name
如果是针对您的具体情况,那么我认为这样应该可以(未经测试):
function change_wc_col() {
global $woocommerce_loop;
$woocommerce_loop[\'columns\'] = 3; // Or whatever number of columns you want here
}
add_action( \'woocommerce_shortcode_before_{$loop_name}_loop\', \'change_wc_col\' );
这似乎会改变
columns
您声明希望更改的值。
很抱歉出现了文字墙,但我希望这至少能帮助你朝着正确的方向前进。