Wordpress自定义排序帖子链接功能
问题描述:
我使用自定义帖子类型来保存产品,每个产品都通过自定义字段保存名称。当我通过单独的模板显示产品时,最好有一个以前的链接去浏览这些产品,但应该按照他们的名字顺序通过它们。目前这是不可能的,因为他们会按照他们的发布日期排序。Wordpress自定义排序帖子链接功能
所以我加入的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'); ?>
谢谢。
答
你实际需要的是自定义查询。你可以试试这个(未测试寿):
将此放在您的functions.php:
function getProductsQuery() {
return new WP_Query(array(
'posts_per_page' => 10,
'post_type' => 'product',
'orderby' => 'title',
'order' => 'ASC'
));
}
然后,用以下内容替换你的循环:
<?php $products = getProductsQuery(); ?>
<?php while($products->have_posts()): $products->the_post(); ?>
<h2><?php the_title(); ?></h2>
(...)
<?php endwhile; ?>
答
最后我解决它!
我只是用这个插件Next/Previous Post Link Plus for WordPress在我的产品(单products.php)单页添加以下代码:
<?php next_post_link_plus(array(
'order_by' => 'custom',
'meta_key' => 'data_product_name_product',
'link' => 'Next product',
'format' => '%link'
)); ?>
<?php previous_post_link_plus(array(
'order_by' => 'custom',
'meta_key' => 'data_product_name_product',
'link' => 'Previous product',
'format' => '%link'
)); ?>
这不是我所需要的。我有一个产品的自定义帖子,并在产品页面显示按名称排列的所有产品。但是我需要的是从产品的单个页面中,让分页按照他们的名称而不是他们的发布日期顺序通过这些产品 – igogra