我知道有一种方法可以执行此操作,但是,我很难理解它。这是我的问题。
我有一个简短代码,可以触发引入商店库存的功能。我格式化通过HTML返回的数据。我的插件已经使用以下短代码['inventory']
如果可能的话,我想做的是在同一个函数中,我想再创建一些短代码,例如[product_id]
希望,在我遍历记录时,希望从同一函数中将当前记录product_id设置为该短代码值。
并结合使用一些WordPress主题元素和简码。
因此,假设广告资源简短代码返回以下内容
<div>
<h1>Product ID {$product_id}</h1>
<p>Price $price</p>
</div>
并循环遍历每个产品,因此,如果有4个产品,它将输出上述HTML 4次。
我使用的主题允许我创建特定于主题的按钮,我不想将这些按钮硬编码到代码中。
我想做的是以下
[inventory]
['record']
//Insert theme buttons using themes builder
<button value=['product_id']>Get more info</button>
['/record]
[/inventory]
所以我想做的是拥有清单,生成要输出的数据,但不是循环遍历并输出id,而是循环遍历并将数据传递给['record']短代码,然后拥有标签使用每个记录下方的按钮呈现输出。并为按钮值指定product_id短代码,该代码将保存当前记录的产品ID。
我想说的是do_shortcode,但是我不确定如何实现。
感谢您的帮助
我尝试阅读文档。
function inventory($atts, $content = null){
extract(shortcode_atts(array(
'storeid' => 'default',
), $atts));
//query that returns the store inventory
$query;
//Output formatted results FYI there is a whole function that but it pretty much just loops through the $query results.
foreach($query as $queryResult){
echo $queryResult;
}
}
add_shortcode('inventory', 'inventory');
<div>
<h1>Product ID {$product_id}</h1>
<p>Price $price</p>
</div>
<button value="apple">Get More Info</button>
更多信息
所以我有一个项目正在研究,但是我很难集中精力处理嵌套的短代码。
这就是我所拥有的
[inventory store=some_store_id category=fruit]
此简码当前从数据库[[0]="product_id"=>['name'=>'apple', 'price'=>'2.00'],[1]="another_product_id"=>['name'=>'apple', 'price'=>'2.00']]
中返回以下内容
Id喜欢拥有这样的东西
<div>
[inventory store=some_store_id category=fruit]
[individual_product]
<div>
<h1>[product_id]</h1>
</div>
<div><h2>[name]</h2></div>
<div><p>[price]</p></div>
[/individual_product]
[/inventory]
</div>
答案 0 :(得分:0)
$content
包含[库存]短代码标签之间的所有内容。您可以执行一些查找和替换代码以将产品ID放在其中作为属性,然后在修改后的字符串上调用do_shortcode以处理主题构建器添加的所有短代码。我发现product_id周围的括号是有问题的,除非您在此处调用另一个简码...
function inventory_shortcode_function( $atts, $content = null ){
// do inventory query here
$inventory = [1,2,3];
$output = '<p>There are ' . count( $inventory ) . ' items.</p>';
foreach( $inventory as $item ) {
$loop_content = str_replace( '[record]', '[record product_id="' . $item . '"]', $content );
$output .= '<div>' . do_shortcode( $loop_content ) . '</div>';
}
return $output;
}
add_shortcode('inventory', 'inventory_shortcode_function' );
function record_shortcode_function( $atts, $content = null ){
extract( shortcode_atts([ 'product_id' => -1], $atts ) );
return do_shortcode( str_replace( 'product_id', $product_id, $content ) );
}
add_shortcode('record', 'record_shortcode_function' );
这是我放入内容编辑器中的内容:
[inventory]
[record]
//Insert theme buttons using themes builder
<button value="product_id">Get more info</button>
[/record]
[/inventory]
这是生成的html:
<p>There are 3 items.</p>
<div>
//Insert theme buttons using themes builder
<button value="1">Get more info</button></div>
<div>
//Insert theme buttons using themes builder
<button value="2">Get more info</button>
</div>
<div>
//Insert theme buttons using themes builder
<button value="3">Get more info</button>
</div>