从WP短代码中获取价值并分配给PHP变量

时间:2017-12-14 19:31:50

标签: php wordpress mysqli

我正在发布计算机构建的帖子。我有一个完全独立的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”]之类的事情并将该值传递给查询?提前谢谢!

1 个答案:

答案 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应该足够了,但准备好的语句是更好的做法。