我讀過這樣的: Woocommerce get next/previous productWoocommerce得到一個/上一個產品相同的類別
,也試過這樣:
<?php previous_post_link('%link', 'Previous in category', TRUE); ?>
下woocommerce產品categpry其中的任何工作,任何想法?
在此先感謝!
我讀過這樣的: Woocommerce get next/previous productWoocommerce得到一個/上一個產品相同的類別
,也試過這樣:
<?php previous_post_link('%link', 'Previous in category', TRUE); ?>
下woocommerce產品categpry其中的任何工作,任何想法?
在此先感謝!
<?php previous_post_link_product('%link', '« Anterior: %title', true); ?>
<?php next_post_link_product('%link', 'Siguiente: %title »', true); ?>
在您的文件yourtheme/functions.php中添加這些功能
function next_post_link_product($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') {
adjacent_post_link_product($format, $link, $in_same_cat, $excluded_categories, false);
}
function previous_post_link_product($format='« %link', $link='%title', $in_same_cat = false, $excluded_categories = '') {
adjacent_post_link_product($format, $link, $in_same_cat, $excluded_categories, true);
}
function adjacent_post_link_product($format, $link, $in_same_cat = false, $excluded_categories = '', $previous = true) {
if ($previous && is_attachment())
$post = get_post(get_post()->post_parent);
else
$post = get_adjacent_post_product($in_same_cat, $excluded_categories, $previous);
if (! $post) {
$output = '';
} else {
$title = $post->post_title;
if (empty($post->post_title))
$title = $previous ? __('Previous Post') : __('Next Post');
$title = apply_filters('the_title', $title, $post->ID);
$date = mysql2date(get_option('date_format'), $post->post_date);
$rel = $previous ? 'prev' : 'next';
$string = '<a href="' . get_permalink($post) . '" rel="'.$rel.'">';
$inlink = str_replace('%title', $title, $link);
$inlink = str_replace('%date', $date, $inlink);
$inlink = $string . $inlink . '</a>';
$output = str_replace('%link', $inlink, $format);
}
$adjacent = $previous ? 'previous' : 'next';
echo apply_filters("{$adjacent}_post_link", $output, $format, $link, $post);
}
function get_adjacent_post_product($in_same_cat = false, $excluded_categories = '', $previous = true) {
global $wpdb;
if (! $post = get_post())
return null;
$current_post_date = $post->post_date;
$join = '';
$posts_in_ex_cats_sql = '';
if ($in_same_cat || ! empty($excluded_categories)) {
$join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id";
if ($in_same_cat) {
if (! is_object_in_taxonomy($post->post_type, 'product_cat'))
return '';
$cat_array = wp_get_object_terms($post->ID, 'product_cat', array('fields' => 'ids'));
if (! $cat_array || is_wp_error($cat_array))
return '';
$join .= " AND tt.taxonomy = 'product_cat' AND tt.term_id IN (" . implode(',', $cat_array) . ")";
}
$posts_in_ex_cats_sql = "AND tt.taxonomy = 'product_cat'";
if (! empty($excluded_categories)) {
if (! is_array($excluded_categories)) {
// back-compat, $excluded_categories used to be IDs separated by " and "
if (strpos($excluded_categories, ' and ') !== false) {
_deprecated_argument(__FUNCTION__, '3.3', sprintf(__('Use commas instead of %s to separate excluded categories.'), "'and'"));
$excluded_categories = explode(' and ', $excluded_categories);
} else {
$excluded_categories = explode(',', $excluded_categories);
}
}
$excluded_categories = array_map('intval', $excluded_categories);
if (! empty($cat_array)) {
$excluded_categories = array_diff($excluded_categories, $cat_array);
$posts_in_ex_cats_sql = '';
}
if (!empty($excluded_categories)) {
$posts_in_ex_cats_sql = " AND tt.taxonomy = 'product_cat' AND tt.term_id NOT IN (" . implode($excluded_categories, ',') . ')';
}
}
}
$adjacent = $previous ? 'previous' : 'next';
$op = $previous ? '<' : '>';
$order = $previous ? 'DESC' : 'ASC';
$join = apply_filters("get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories);
$where = apply_filters("get_{$adjacent}_post_where", $wpdb->prepare("WHERE p.post_date $op %s AND p.post_type = %s AND p.post_status = 'publish' $posts_in_ex_cats_sql", $current_post_date, $post->post_type), $in_same_cat, $excluded_categories);
$sort = apply_filters("get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1");
$query = "SELECT p.id FROM $wpdb->posts AS p $join $where $sort";
$query_key = 'adjacent_post_' . md5($query);
$result = wp_cache_get($query_key, 'counts');
if (false !== $result) {
if ($result)
$result = get_post($result);
return $result;
}
$result = $wpdb->get_var($query);
if (null === $result)
$result = '';
wp_cache_set($query_key, $result, 'counts');
if ($result)
$result = get_post($result);
return $result;
}
例:
<?php previous_post_link('Previous: %link', '%title', true, '', 'product_cat'); ?>
<?php next_post_link('Next: %link', '%title', true, '', 'product_cat'); ?>
說明:
使用WordPress的previous_post_link
或next_post_link
將工作。事實上,你幾乎在那裏。
除了設置true
作爲第三個參數($ in_same_term),確保分類中的名字也傳遞的最後一個參數($分類)。對於WooCommerce,默認產品類別是product_cat
。
有一點需要注意,這些功能將獲得匹配任何條款的下一個/以前的產品。通過將術語id(s)作爲第四個參數($ exclude_terms),可以排除術語。
參考:
https://developer.wordpress.org/reference/functions/previous_post_link/ https://developer.wordpress.org/reference/functions/next_post_link/
<?php previous_post_link($format, $link, $in_same_term = false, $excluded_terms = '', $taxonomy = 'category'); ?>
<?php next_post_link($format, $link, $in_same_term = false, $excluded_terms = '', $taxonomy = 'category'); ?>
Edgardos解決辦法是讓我一個真棒出發點。
但是,它假設產品是按post_date排序的。通常menu_order應該有更高的排序優先級。
因此,我改變: $current_post_date = $post->post_date;
分爲: $current_post_menu_order = $post->menu_order;
而且$哪裏使用p.menu_order/$ current_post_menu_order:
$where = apply_filters("get_{$adjacent}_post_where", $wpdb->prepare("WHERE p.menu_order $op %s AND p.post_type = %s AND p.post_status = 'publish' $posts_in_ex_cats_sql", $current_post_menu_order, $post->post_type), $in_same_cat, $excluded_categories);
感謝。作品。應該是選擇的解決方案。 –