覆盖特色产品的短码$ATTS

时间:2015-05-10 作者:timholz

您好–在我的主题(mystile)中,我仅限于确定主页上显示的特色产品的数量。但我无法分配列。短代码不适用,因为主页是通用的,不能在后端更改。当然,我可以更改插件源文件(class-wc-shortcode.php,第76行)中的列数,但下一次更新将丢失这些列数。我不太擅长php,我浏览了类似的问题。我尝试了几种方法来过滤此值,但都不起作用。以下是我的方法:

/*different values for featured prod shortcode*/
function my_shortcode_val( $atts ) {
$atts = shortcode_atts( array(
        \'per_page\' => \'12\',
        \'columns\'  => \'2\',
        \'orderby\'  => \'date\',
        \'order\'    => \'desc\'
    ), $atts );
return $atts;
}
add_filter( \'featured_products\', \'my_shortcode_val\' );
但这不起作用。是否有方法重写列的值或任何短代码值?谢谢你的帮助。

1 个回复
SO网友:Nick Young

好吧,我想把这个贴在这里,因为你的问题的标题。

有一种方法可以更改短代码属性,但它也将取决于插件的开发人员所做的工作。当使用短代码开发插件时,可以选择使用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 您声明希望更改的值。

很抱歉出现了文字墙,但我希望这至少能帮助你朝着正确的方向前进。

结束

相关推荐

Multiple level shortcodes

我正在开发一个插件,遇到了一种情况,我希望有人能帮我找到一个解决方案。我想要一个短代码结构,如:[shortcode_1] [shortcode_2] [shortcode_3] [shortcode_4][/shortcode_4] [/shortcode_3] [/shortcode_2] [/shortcode_1] 但如果我使用add\\u短代码,只有第一个短代码有效。。。有没有办法得到这样的短代码结构?谢谢