【问题标题】:How to create add to compare in Wordpress?如何在 Wordpress 中创建添加以进行比较?
【发布时间】:2016-04-21 07:24:08
【问题描述】:

我不想使用任何插件。我尝试使用 cookie 创建比较页面,但仍然有问题。谁能告诉我如何在 wordpress 中创建比较产品?

使用循环我得到以下输出,其中我添加了“添加到比较”链接或按钮

<table>
<tr>
  <td> Product ID</td>
  <td>Product Name</td>
  <td><a href="#">Add To Compare</a></td>
</tr>
<tr>
  <td> 123</td>
  <td>P-one</td>
  <td><a href="#">Add To Compare</a></td>  
</tr>
<tr>
  <td>234</td>
  <td>P-2</td>
  <td><a href="#">Add To Compare</a></td>
</tr>
<tr>
  <td>345</td>
  <td>P-3</td>
  <td><a href="#">Add To Compare</a></td>
</tr>
<tr>
  <td>456</td>
  <td>P-4</td>
  <td><a href="#">Add To Compare</a></td>
</tr>
  </table>

我的逻辑不清楚。我不知道我应该怎么做才能构建添加以比较产品页面。但我尝试了以下步骤来创建比较产品页面:


我创建了两种自定义帖子类型:

  1. 主要产品
  2. 子产品

主产品子产品母帖。这意味着 Sub ProductsMain Products 的子级。

主要产品是品牌的帖子,子产品是我们添加产品及其与这些品牌相关的详细信息的帖子。

我有一个名为 BARATA 的品牌(假设:P),他们的产品是:

  1. Barata Pone
  2. 巴拉塔Ptwo
  3. Barata Pthree
  4. Barata Pfour

它们都有相同的规格,如宽度、长度、高度。

Main Product 自定义模板中,我添加了 this loop 以从 sub products

获取其子帖子
<table>
            <thead>
                <tr>
                    <th><h4>Product Name</h4></th>
                    <th><h4>Any Info</h4></th>
                    <th><h4>Select to Compare</h4></th>

                </tr>
            </thead>
            <tbody>
<?php
$childargs = array(


'orderby' => 'post_title',
'order' => 'ASC',
);
$compi = 1;
 $child_posts = types_child_posts("subproducts",$childargs);
foreach ($child_posts as $child_post) {  

$variid = $child_post->ID;
$variname = "compareid".$compi++;
?>


            <tr>
                    <td><?php echo $child_post->post_title; ?></td>
                    <td><?php echo get_post_meta($child_post->ID, 'any-info-cutomfield', TRUE);  ?></td>
                    <th><a href="" onclick="setting_my_first_cookie('<?php echo $variid; ?>','<?php echo $variname; ?>')">Compare</a>

<a href="" onclick="setting_my_first_cookie_delete('<?php echo $variid; ?>','<?php echo $variname; ?>')">Remove</a>
</th>

                </tr>
            </tbody>
<?php
// Accessing an individual cookie value
echo $_COOKIE[$variid];
echo $_COOKIE[$variname];

?>

  <?php 
} 

?>

以上代码获取主页的子产品并使用添加到比较按钮将它们显示在表格中。在$variid 中我存储了子产品的ID 和他们的名字$variname

我使用 Onclick 将这些数据发送到 javascript 函数以创建 cookie。

Javascript:

<script type="text/javascript"> 

function setting_my_first_cookie(variid,variname) {
 var d = new Date();
    d.setTime(d.getTime() + (30*24*60*60*1000));
    var expires = "expires="+d.toUTCString();
    document.cookie = variname + "=" + variid + "; " + "expires; path=/; domain=.domain.com";
}
</script>

<script type="text/javascript"> 

function setting_my_first_cookie_delete(variid,variname) {
   document.cookie = variname + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.domain.com';
}
</script>

在比较页面上,我可以检索这些数据以显示这些产品的比较。但也有一些问题。就像我不知道如何为要比较的产品添加限制一样。

你能给我添加产品进行比较的逻辑吗?其他人实际上是如何做到的?我该怎么做?请指引我正确的方向。

【问题讨论】:

  • 您能否阐明“我不知道如何为要比较的产品添加限制”的意思?你的意思是应该限制用户可以同时比较多少个项目?
  • 首先,要让产品属于一个品牌,品牌不应该是帖子,产品不应该是子帖子,而是产品应该是产品类型的帖子(使用 WooCommerce帮助),品牌应该是“类别”,这是“WordPress”的做事方式。
  • 其次,您提到您的脑海中没有完整的逻辑,所以我建议您检查当前的 WooCommerce 插件,以及 Magento 中的比较功能,您可以通过谷歌搜索轻松找到所有这些周围。
  • IDK,也许这种问题应该受到某种核惩罚,任何支持它的人也应该为此失去代表!我只是在这种意识流上浪费了我生命中的 3 分钟。这不是一个问题,甚至试图礼貌回答的人都让我为人类生命的无用价值而哭泣。就像帕特农神庙的拜伦一样,我在这里......
  • @Jim Maguire 赞成这个问题的人只是略过了这个问题。乍一看,似乎付出了很多努力。但其中隐藏着疯狂。

标签: javascript php wordpress cookies e-commerce


【解决方案1】:

您可以使用 $_SESSION,这可能是处理逻辑的一种更简洁的方式。添加/删除项目的功能如下(未经测试的代码):

$_SESSION['barata_products'] = [];

function add_products(varid) {
    array_push($_SESSION['barata_products'],varid);
}

function remove_product(varid) {
    $product_index = array_search(varid,$_SESSION['barata_products']);
    unset($_SESSION['barata_products'][$product_index]);
}

function remove_all_products() {
    $_SESSION['barata_products'] = [];
}

//helper function to check if the session array is greater than your desired amount, where x is number of products within the array.
function more_than_x(session,x) {
    $_SESSION['barata_products'].count() > x ? true : false
}

如果您需要更高级的 wordpress 会话逻辑,请查看 this blog

【讨论】:

    【解决方案2】:

    您可以简单地使用 ajax 为每个产品创建一个会话,例如:

    $(document).ready(function(){
      $('.product').click(function(){
        var product_id = $(this).attr('id');
         $.ajax({
         method: 'POST',
         url : "YOUR PHP FILE NAME",
         data : {product_id:product_id},
         success : function(resp){
         alert("Product is added to be compared");
         }
         });
      });
    });
    

    PHP 文件代码:

     <?php 
      session_start();
      $product_id = $_POST['product_id'];
      if(!is_array($_SESSION['ids']))
      {
       $_SESSION['ids'] = array();
      }
      else
      {
        array_push($_SESSION['ids'], $product_id);
      }
     ?>
    

    然后您可以使用 $_SESSION 变量将所有产品 ID 获取到您的比较模板。

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2022-12-19
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多