我有来自不同开发者的多个插件,这些插件允许我显示亚马逊产品。 他们都要求我在他们的短代码中输入亚马逊类别ID。
[amazon bestseller="1234567"]
[amz_links node="1234567"]
[amazon_toprated category="1234567"]
我在大量的页面,小部件等中使用这些短代码。 我不时地需要更改ID,并且手动更改它们是一件非常麻烦的事。
我的想法是创建自己的短代码,例如[myamazon_id]
,并在其他短代码中输入该短代码:[amazon bestseller="[myamazon_id]"]
不幸的是,这似乎不起作用,因为它们是自封的短代码,显然不允许短代码内的短代码。
我目前的解决方案是使用一个允许我在WordPress页面和小部件中使用PHP的插件。
[insert_php]echo do_shortcode( '[amazon bestseller="'.myamazonid().'"]' );[/insert_php]
这确实有效,但我想知道是否有更好的解决方案将varible传递给短代码。直接在页面和小部件上使用PHP并不是我感觉良好的事情。
我的目标是拥有这样的内容:[amazon bestseller="[myamazon_id]"]
答案 0 :(得分:0)
一个简单的解决方案就是插件Post Snippets。在这个插件中,您可以创建3个新的短代码,其中包含3个带有类别ID的亚马逊短代码。现在您可以使用新创建的短代码,如果您想更改类别ID,只需在一个地方进行编辑即可。
答案 1 :(得分:0)
使用以下代码进行短代码[amazon bestseller="myamazon_id"]
可能。
您无需使用这些大括号"["
和"]"
function first_shortcode_amazon( $atts ) {
$newvar = do_shortcode('['.$atts['bestseller'].']');
return $newvar;
}
add_shortcode( 'amazon', 'first_shortcode_amazon' );
function second_shortcode_for_amazonid( $atts ) {
global $post;
// here i have placed global post id. you can do code to get amazon id here
return 'AMAZON_ID=> '.$post->ID;
}
add_shortcode( 'myamazon_id', 'second_shortcode_for_amazonid' );
答案 2 :(得分:0)
首先,由于$ atts是一个数组,因此必须在函数中定义$ atts项。
这是在短代码中传递变量的完整代码-
让我们假设您需要通过简码显示该类别的所有产品,您需要在函数文件中执行以下代码-
function creative_writing_func($atts) {
$args = array(
'post_type' => 'product',
'posts_per_page' => 10,
'product_cat' => $atts['categoryname']
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product;
echo '<br /><a href="'.get_permalink().'">' . woocommerce_get_product_thumbnail().' '.get_the_title().'</a>';
endwhile;
wp_reset_query();
}
add_shortcode('creative_writing_func_short', 'creative_writing_func');
现在,您只需将简码代码粘贴到模板文件或Wordpress默认编辑器中即可-
[creative_writing_func_short categoryname="creative-writing-english-literature"]
我们要在简码中传递类别名称(creative-writing-english-literature)。
已经测试过并且可以正常工作。