Wordpress wp-电子商务插件将缺货产品移动到页面末尾

问题描述 投票:0回答:1

使用下面的wp-e-commerce插件:

https://github.com/wp-e-commerce/WP-e-Commerce

想办法让所有处于“缺货”状态的产品都出现在页面的末尾(在网格视图中查看产品类别时),从而使缺货的产品出现在页面上结束了,并且在“库存”产品中并没有乱七八糟。

修改下面的代码:

$theCategory = get_the_category();

$args = array(
 'post_type'     => 'post',
 'post_status'    => 'publish',
 'cat'          =>$theCategory[0]->term_id,
 'meta_query'    => array(
    'relation' => 'OR',
     array(
         'key'   => 'test_stock',
         'value' => 0,
         'compare' => '!=',
     ),
     array(
         'key'   => 'test_stock',
         'compare' => 'NOT EXISTS',
     )         
 )

);

$query = new WP_Query( $args );

理想的解决方案是添加一个过滤器到活动主题 function.php 文件中。

对于 Woocoomerce 这是一个不同的 Wordpress 购物车插件,可以使用以下过滤器,因此尝试查看我发布的第一部分代码是否可以以某种方式合并到下面的过滤器中,以移动缺货的产品到我们的 wp 电子商务商店中产品页面的末尾。

Woocommerce 过滤器如下:

add_filter('posts_clauses', 'order_by_stock_status');
function order_by_stock_status($posts_clauses) {
global $wpdb;
// only change query on WooCommerce loops
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || 
is_product_taxonomy())) {
    $posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = 
istockstatus.post_id) ";
    $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
    $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND 
istockstatus.meta_value <> '' " . $posts_clauses['where'];
}
return $posts_clauses;
}

是否有人对创建一个过滤器以进入活动的 WordPress 主题 function.php 文件有任何建议,该过滤器会将所有“缺货”产品移动到页面末尾,以便当客户浏览页面时,直到最后他们才看到“缺货”的产品。

下面是一个链接,其中显示了 Wordpress wp-e-commerce 插件的所有简码:

https://wpshortcode.org/wp-e-commerce/

最新更新如下:

注意到插件仪表板中有一个设置选项卡,可让您按升序和降序以及价格、上传时间和其他一些选项来排列产品布局。

在下面添加了以下代码来注册“库存”选项,该选项现在显示在设置选项卡中作为可供选择的选项。只需要编写这个新的“有库存”选项工作所需的代码,这样当选择“有库存”选项卡时,产品就会按库存状态排列,所有有库存的产品都会显示首先。

option value="In Stock"  <?php selected( get_option( 
'wpsc_product_order' ), 'In_Stock' ); ?>><?php _ex( 'In Stock', 
'product 
 order setting', 'wp-e-commerce' ); ?></option>

上述代码,其他设置如下:

    <?php _e( 'Sort Product By', 'wp-e-commerce' ); ?>:
    </th>
    <td>
    <select name='wpsc_options[wpsc_sort_by]'>
    <option <?php if ( isset( $wpsc_sort_by1 ) )
    echo $wpsc_sort_by1; ?> value='name'><?php esc_html_e( 'Name', 'wp- 
    e-commerce' ); ?></option>
    <option <?php if ( isset( $wpsc_sort_by2 ) )
    echo $wpsc_sort_by2; ?> value='price'><?php esc_html_e( 'Price', 
    'wp-e-commerce' ); ?></option>
    <option <?php if ( isset( $wpsc_sort_by4 ) )
    echo $wpsc_sort_by4; ?> value='dragndrop'><?php esc_html_e( 'Drag 
    &amp; Drop', 'wp-e-commerce' ); ?></option>
    <option <?php if ( isset( $wpsc_sort_by3 ) )
    echo $wpsc_sort_by3; ?> value='id'><?php esc_html_e( 'Time 
    Uploaded', 'wp-e-commerce' ); ?></option>
    </select>

    <select name="wpsc_options[wpsc_product_order]">
    <option value="ASC" <?php selected( get_option( 
    'wpsc_product_order' ), 'ASC' ); ?>><?php _ex( 'Ascending', 
    'product order setting', 'wp-e-commerce' ); ?></option>
    <option value="DESC"  <?php selected( get_option( 
    'wpsc_product_order' ), 'DESC' ); ?>><?php _ex( 'Descending', 
    'product order setting', 'wp-e-commerce' ); ?></option>
    <option value="In Stock"  <?php selected( get_option( 
    'wpsc_product_order' ), 'In_Stock' ); ?>><?php _ex( 'In Stock', 
    'product order setting', 'wp-e-commerce' ); ?></option>
    </select>
    </td>
    </tr>

是否有人对在选择“有货”框后使有库存(已发布)的产品首先显示在缺货产品前面所需的附加代码有任何想法或建议?

任何想法或建议,我们将不胜感激!

php wordpress filter product categories
1个回答
0
投票

下面的代码将转到您活动主题的functions.php文件。

    /*** Sorting out of stock WooCommerce products - Order product collections by stock status, in-stock products first. */
class iWC_Orderby_Stock_Status {
    public function __construct() {
    // Check if WooCommerce is active
        if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
            add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000);
        }
    }
    public function order_by_stock_status($posts_clauses){
        global $wpdb;
        // only change query on WooCommerce loops
        if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
        $posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
        $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
        $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
        }
    return $posts_clauses;
    }
}
new iWC_Orderby_Stock_Status;
    /*** END - Order product collections by stock status, instock products first. */
© www.soinside.com 2019 - 2024. All rights reserved.