我正在发布计算机构建的帖子。我有一个完全独立的MYSQL数据库,我跟踪计算机组件,分配给每个构建。例如,BuildID = 4将具有“华硕Rampage VI Extreme主板x299”,Core i9 7980xe Extreme LGA 2066“作为来自以下查询的值:
"SELECT BCats.Cat, BParts.ItemName, BParts.ItemSKU, BParts.ItemURL, BParts.ItemPrice, BParts.Qty, BParts.ItemPrice*BParts.Qty AS Price
FROM BParts
INNER JOIN BCats ON BCats.CatNo = BParts.ItemCat
WHERE BParts.BuildNo = 4 AND BParts.SystemNo = 1
ORDER BY BCats.CatNo ASC"
我需要将“BParts.BuildNo = 4”转换为变量,例如“BParts.BuildNo = $ buildNo”。然后,对于构建我的一个办公桌的每个客户,我可以在照片库中插入短代码[build],将所有属于构建版本4的部分发布到表格中(参见https://badvolf.com/en/declassified-systems-build/的工作
原谅我,但我很难过如何去做。我到处搜索,但似乎没有什么适合我想要的,但我知道它可以以某种方式完成。这是我到目前为止所做的,它会生成您在上面链接中看到的表格:
function wp_build_shortcode(){
$query = "SELECT BCats.Cat, BParts.ItemName, BParts.ItemSKU, BParts.ItemURL, BParts.ItemPrice, BParts.Qty, BParts.ItemPrice*BParts.Qty AS Price
FROM BParts
INNER JOIN BCats ON BCats.CatNo = BParts.ItemCat
WHERE BParts.BuildNo = 4 AND BParts.SystemNo = 1
ORDER BY BCats.CatNo ASC";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Build Name</title>
</style>
</head>
<body>
<table id="example" class="display" cellspacing="0" width="100%">
<col width="15%">
<col width="85%">
<col width="20%">
<thead>
<tr>
<th></th>
<th>Item</th>
<th>Qty</th>
<th>Total Price</th>
</tr>
</thead>
<tbody>
<?php
if ($result = mysqli_query($GLOBALS['link'], $query)) {
while ($row = $result->fetch_assoc()) { ?>
<tr>
<td><?php echo $row["Cat"]; ?></td>
<td><?php echo $row["ItemName"]; ?></td>
<td><?php echo $row["Qty"]; ?></td>
<td><?php echo $row["Price"]; ?></td>
</tr><?php }
} ?>
</tbody>
</table>
<?php
}
add_shortcode('build', 'wp_build_shortcode');
?>
那么,我怎样才能做[build =“4”]之类的事情并将该值传递给查询?提前谢谢!
答案 0 :(得分:0)
您需要为您的函数至少提供一个参数。例如wp_build_shortcode($attributes)
。 $attributes
将是一个包含已解析的短代码参数的数组。在您的情况下['build' => '4']. Then you can assign it to any local variable:
$ buildNo = issest($ attributes [&#39; build&#39;])?
intval($ attributes [&#39; build&#39;]):0;`。 You can find more information here.
在WP中,特权用户(订阅者)可以访问短代码。因此,您应将参数视为不受信任的用户输入,并保护自己免受SQL注入和其他攻击。在您的情况下,上面代码中的intval
应该足够了,但准备好的语句是更好的做法。