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; ?> 
+0

这不是我所需要的。我有一个产品的自定义帖子,并在产品页面显示按名称排列的所有产品。但是我需要的是从产品的单个页面中,让分页按照他们的名称而不是他们的发布日期顺序通过这些产品 – igogra

最后我解决它!

我只是用这个插件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' 
          )); ?>