我在Woocommerce经营一家批发店。需要登录才能看到价格。这已设置并正常工作。现在,我希望在每个产品页面上添加一个登录表单,仅向访问者显示(未登录用户)。
我正在使用WooCommerce目录可见性插件。这个插件提供了我上面描述的功能,但我的主题在某种程度上弄乱了它。插件作者说要与主题开发人员交谈,主题开发人员说要与插件作者交谈。所以现在我想找到一个解决方法。
第一期:该插件附带一个短代码[woocommerce_logon_form],会显示一个登录表单。我不想手动将其添加到每个现有产品,因为我的网站上有数千种产品。我正在寻找一种方法来通过产品页面布局的代码来实现它。
我发现这段代码(要添加到functions.php中)运行良好:
// adds notice at single product page above add to cart
add_action( 'woocommerce_single_product_summary', 'return_policy', 20 );
function return_policy() {
echo '<p id="rtrn">30-day return policy offered. See Terms and Conditions for details.</p>';
}
但是,它只会显示文字。添加时,短代码不会起作用而不是示例文本。
第二期:即使客户已登录,短代码也会显示该表单。
我目前正在使用这个漂亮的代码,根据用户是否登录显示或隐藏内容:
add_shortcode( 'access', 'access_check_shortcode' );
function access_check_shortcode( $attr, $content = null ) {
extract( shortcode_atts( array( 'capability' => 'read' ), $attr ) );
if ( current_user_can( $capability ) && !is_null( $content ) && !is_feed() )
return $content;
return '';
}
add_shortcode( 'visitor', 'visitor_check_shortcode' );
function visitor_check_shortcode( $atts, $content = null ) {
if ( ( !is_user_logged_in() && !is_null( $content ) ) || is_feed() )
return $content;
return '';
}
该短代码适用于文本,但不适用于其他短代码。 因此,这些短代码的组合:[visitor] [woocommerce_logon_form] [/ visitor]将不会向访问者显示登录表单。相反,它只会将它们显示为文本[woocommerce_logon_form]。
请帮忙!我确信这可能很容易被具有编码技能的人修复。 感谢您努力回答这个问题。请记住,我对代码的理解非常有限,如果您还可以指出添加或修改代码的文件,那将会很棒。
答案 0 :(得分:2)
要使您的短代码在php代码或php / html代码中运行,您需要使用本机WordPress function
do_shortcode()
...您可以将它与短代码一起使用,例如在第一个函数中使用它:
add_action( 'woocommerce_single_product_summary', 'return_policy', 20 );
function return_policy() {
echo do_shortcode('[woocommerce_logon_form]');
}
这将有效......
要查看您可以使用的所有不同的钩子而不是 woocommerce_single_product_summary
,请参阅此2模板代码以便在更方便的情况下选择:
您也可以通过以下方式在现有的短代码中添加相同的方式:
add_shortcode( 'visitor', 'visitor_check_shortcode' );
function visitor_check_shortcode( $atts, $content = null ) {
if ( ( !is_user_logged_in() && !is_null( $content ) ) || is_feed() )
return do_shortcode('[woocommerce_logon_form]');
return '';
}
这也会奏效。
参考此答案:Change markup in WooCommerce shortcode output
因此,您可以看到问题已在两个问题上得到解决