【发布时间】:2014-05-19 11:38:33
【问题描述】:
我正在使用自定义帖子类型来保存产品,每个产品都通过自定义字段保存一个名称。当我通过其单一模板显示产品时,最好有一个下一个和上一个链接来浏览这些产品,但它应该按照它们的名称顺序浏览它们。目前这是不可能的,因为它们将按发布日期排序。
所以我在functions.php中添加了以下代码,但它不起作用,我不知道这是否必须以不同的方式进行:
if(is_singular('products')) {
add_filter('get_previous_post_join', 'rt_post_join');
add_filter('get_next_post_join', 'rt_post_join');
add_filter('get_previous_post_where', 'rt_prev_post_where');
add_filter('get_next_post_where', 'rt_next_post_where');
add_filter('get_previous_post_sort', 'rt_prev_post_sort');
add_filter('get_next_post_sort', 'rt_next_post_sort');
}
function rt_post_join($join, $isc, $ec) {
global $wpdb;
$join = " INNER JOIN $wpdb->postmeta AS pm ON pm.post_id = p.ID";
return $join;
}
function rt_prev_post_where($w) {
global $wpdb, $post;
$prd = get_post_meta($post->ID, 'data_product_name_product', true);
$w = $wpdb->prepare(" WHERE pm.meta_key = 'data_product_name_product' AND pm.meta_value < '$prd' AND p.post_type = 'products' AND p.post_status = 'publish'");
return $w;
}
function rt_next_post_where($w) {
global $wpdb, $post;
$prd = get_post_meta($post->ID, 'data_product_name_product', true);
$w = $wpdb->prepare(" WHERE pm.meta_key = 'data_product_name_product' AND pm.meta_value > '$prd' AND p.post_type = 'products' AND p.post_status = 'publish'");
return $w;
}
function rt_prev_post_sort($o) {
$o = "ORDER BY pm.meta_value DESC LIMIT 1";
return $o;
}
function rt_next_post_sort($o) {
$o = "ORDER BY pm.meta_value ASC LIMIT 1";
return $o;
}
在我的单页产品(single-products.php)中,我添加了以下代码来显示分页链接:
<?php next_post_link('%link', 'Next product'); ?>
<?php previous_post_link('%link','Previous product'); ?>
谢谢。
【问题讨论】:
标签: wordpress