【问题标题】:Wordpress Custom Ordering Post Link FunctionsWordpress 自定义订购帖子链接功能
【发布时间】: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


    【解决方案1】:

    您真正需要的是自定义查询。你可以试试这个(未经测试):

    把它放在你的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; ?>
    

    【讨论】:

    • 这不是我需要的。我有一个产品的自定义帖子,在产品页面中,我显示按名称订购的所有产品。但我需要的是从产品的单页让分页按产品名称而不是发布日期的顺序遍历这些产品
    【解决方案2】:

    我终于解决了!

    我刚刚使用了插件Next/Previous Post Link Plus for WordPress,并在我的单页产品(single-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'
                                )); ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2012-01-02
      • 2014-05-11
      • 2018-03-10
      • 2020-08-25
      • 2016-06-25
      • 2013-03-18
      相关资源
      最近更新 更多