草庐IT

php - Wordpress - 分页帖子,按 : meta_key only from current category 排序

coder 2024-04-20 原文

我试图从我的网站制作分页链接。


架构:


Serie | (category)
    |_ Temporada 1 (taxonomy: temporada)
            |_ Episodio 1 (posts 1 - meta_key: numeroepisodio)
            |_ Episodio 2 (posts 2 - meta_key: numeroepisodio)
            |_ Episodio 3 (posts 3 - meta_key: numeroepisodio)
            |_ Episodio 4 (posts 4 - meta_key: numeroepisodio)
            |_ ...
    |_ Temporada 2  (taxonomy: temporada)
            |_ Episodio 1 (posts 1 - meta_key: numeroepisodio)
            |_ Episodio 2 (posts 2 - meta_key: numeroepisodio)
            |_ Episodio 3 (posts 3 - meta_key: numeroepisodio)
            |_ Episodio 4 (posts 4 - meta_key: numeroepisodio)
            |_ ...

Another Serie 1
    |_ ...
Another Serie 2
    |_ ...

问题:


当我创建帖子时,分页按日期排序。 可以帮助我通过 meta_key 进行此排序,在相同的分类法中仅针对当前类别吗?


代码:


<?php
    $prev_post = get_adjacent_post( true, '', true );
    $next_post = get_adjacent_post( true, '', false );

    if ( !is_a( $next_post , 'WP_Post' ) ) {
        $query_args = array (
        'post_type'         => 'post',
        'posts_per_page'    => -1,
        'meta_key'          => 'numeroepisodio',
        'orderby'           => 'meta_value meta_value_num',
        'order'             => 'DESC',
        'paged'             => $paged,
        'tax_query'         => array( 
                                array( 'taxonomy' => 'categry'),
                                array( 'taxonomy' => 'temporada') 
                        )
    );
        $oldest = get_posts($query_args);
        $next_post = $oldest[0];
    }
    if ( !is_a( $prev_post , 'WP_Post' ) ) {
        $latest = get_posts($query_args);
        $prev_post = $latest[0];
    }
?>
<?php if ( is_a( $prev_post , 'WP_Post' ) ) : ?>
<a href="<?php echo get_permalink( $prev_post->ID ); ?>"><div id="temporadas-dropdown"><i class="fa fa-caret-left"></i> ANTERIOR</div></a>
<?php endif; ?> 

<?php if ( is_a( $next_post , 'WP_Post' ) ) : ?>
<a href="<?php echo get_permalink( $next_post->ID ); ?>"><div id="temporadas-dropdown">SIGUIENTE <i class="fa fa-caret-right"></i></div></a>
<?php endif; ?> 

这是一个活生生的例子:http://series.enlatino.net/ver-online/silicon-valley/

非常感谢您的建议!

最佳答案

我发现了这个:

<?php
/** Plugin Name: (#73190) Alter adjacent post link sort order */
function wpse73190_adjacent_post_sort( $orderby )
{
    return "ORDER BY p.menu_order DESC LIMIT 1";
}
add_filter( 'get_previous_post_sort', 'wpse73190_adjacent_post_sort' );
add_filter( 'get_next_post_sort', 'wpse73190_adjacent_post_sort' );

来自 wordpress.stackexchange.com - 这会更好地解释它,所以请检查它......接受的答案,但基本上你可以使用该过滤器更改查询,并且有不同的过滤器 - 在哪里,加入,排序上一个和下一个。


完全不同的答案:

我不太喜欢手动执行此操作,但这可能会奏效 - 虽然我没有对其进行测试,但我对分类法和 wordpress 数据库的全面了解有些欠缺。

function get_adjacent_episode($post, $prev_or_next) {
    global $wpdb;
    
    $prev_or_next = ($prev_or_next === 'previous') ? 'DESC' : 'ASC';
    $operator = ($prev_or_next === 'previous') ? '<' : '>';
    
    $cur_episode = get_post_meta($post->ID, 'numeroepisodio', true);
    
    $query = sprintf("select p.ID from $wpdb->posts p 
        inner join $wpdb->postmeta m 
        on p.ID = m.post_id
        inner join $wpdb->terms_relationships r
        on p.ID = r.object_id
        where r.term_taxonomy_id = (select term_taxonomy_id from $wpdb->term_taxonomy where taxonomy = '%s' limit 1) 
        and p.post_type = 'post' and m.meta_key = '%s' and m.meta_value %s %s
        order by m.meta_key %s limit 1", 'temporada', 'numeroepisodio', $operator, $cur_episode, $prev_or_next);
        
    $adjacent_post = $wpdb->get_results($query);
    return $adjacent_post;
}

调用它:

$next_post = get_adjacent_episode($post, 'next');

$prev_post = get_adjacent_episode($post, 'previous');

请注意,查询只有 select p.ID,因此您只能访问 $next_post->ID 但您可以扩展此选择以捕获如果需要更多的结果。

关于php - Wordpress - 分页帖子,按 : meta_key only from current category 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31536074/

有关php - Wordpress - 分页帖子,按 : meta_key only from current category 排序的更多相关文章

  1. ruby-on-rails - 结合 meta_search 与 acts_as_taggable_on - 2

    我在开发的Rails3网站的一些搜索功能上遇到了一个小问题。我有一个简单的Post模型,如下所示:classPost我正在使用acts_as_taggable_on来更轻松地向我的帖子添加标签。当我有一个标记为“rails”的帖子并执行以下操作时,一切正常:@posts=Post.tagged_with("rails")问题是,我还想搜索帖子的标题。当我有一篇标题为“Helloworld”并标记为“rails”的帖子时,我希望能够通过搜索“hello”或“rails”来找到这篇帖子。因此,我希望标题列的LIKE语句与acts_as_taggable_on提供的tagged_with方法

  2. ruby-on-rails - 需要帮助最大化多个相似对象中的 3 个因素并适当排序 - 2

    我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night

  3. ruby-on-rails - 在具有 ActiveRecord 条件的相关模型中按字段排序 - 2

    我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我

  4. ruby - 按数字(从大到大)然后按字母(字母顺序)对对象集合进行排序 - 2

    我正在构建一个小部件来显示奥运会的奖牌数。我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,以及奖牌计数的“金”、“银”、“铜”。列表应该排序:1.首先是奖牌总数2.如果奖牌相同,按类型分割(金>银>铜,即2金>1金+1银)3.如果奖牌和类型相同,则按字母顺序子排序我正在用ruby​​做这件事,但我想语言并不重要。我确实找到了一个解决方案,但如果感觉必须有更优雅的方法来实现它。这是我做的:使用加权奖牌总数创建一个虚拟属性。因此,如果他们有2个金牌和1个银牌,加权总数将为“3.020100”。1金1银1铜为“3.010101”由于我们希望将奖牌数排序为最高的,因此列表按降序排

  5. ruby - 每个页面上的 Jekyll 分页 - 2

    据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b

  6. ruby-on-rails - 在不重新查询数据库的情况下重新排序 Rails 中的事件记录? - 2

    例如,假设我有一个名为Products的模型,并且在ProductsController中,我有以下代码用于product_listView以显示已排序的产品。@products=Product.order(params[:order_by])让我们想象一下,在product_listView中,用户可以使用下拉菜单按价格、评级、重量等进行排序。数据库中的产品不会经常更改。我很难理解的是,每次用户选择新的order_by过滤器时,rails是否必须查询,或者rails是否能够以某种方式缓存事件记录以在服务器端重新排序?有没有一种方法可以编写它,以便在用户排序时rails不会重新查询结果

  7. ruby-on-rails - 如何对对象数组进行排序? - 2

    我有一个对象如下:[{:id=>2,:fname=>"Ron",:lname=>"XXXXX",:photo=>"XXX"},{:id=>3,:fname=>"Dain",:lname=>"XXXX",:photo=>"XXXXXXX"},{:id=>1,:fname=>"Bob",:lname=>"XXXXXX",:photo=>"XXXX"}]我想按fname排序,不区分大小写,所以它会导致编号:1,3,2我该如何排序?我正在尝试:@people.sort!{|x,y|y[:fname]x[:fname]}但这没有任何效果。 最佳答案

  8. ruby - 使用自定义排序首选项对数组进行排序? - 2

    有人可以告诉我如何根据自定义字符串对嵌套数组进行排序吗?比如有没有办法排序:[['Red','Blue'],['Green','Orange'],['Purple','Yellow']]“橙色”、“黄色”,然后是“蓝色”?最终结果如下所示:[['Green','Orange'],['Purple','Yellow'],['Red','Blue']]它不是按字母顺序排序的。我很想知道我是否可以定义要排序的值以实现上述目标。 最佳答案 sort_by对于这种排序总是非常方便:a=[['Red','Blue'],['Green','Ora

  9. Ruby 将对象插入现有的已排序对象数组 - 2

    我有以下现有的Dog对象数组,它们按age属性排序:classDogattr_accessor:agedefinitialize(age)@age=ageendenddogs=[Dog.new(1),Dog.new(4),Dog.new(10)]我现在想插入一条新的狗记录,并将它放在数组中的正确位置。假设我想插入这个对象:another_dog=Dog.new(8)我想把它插入到数组中,让它成为数组中的第三项。这是一个人为的示例,旨在演示我特别想如何将一个项目插入到现有的有序数组中。我意识到我可以创建一个全新的数组并重新对所有对象进行排序,但这不是我的目标。谢谢!

  10. ruby - 如何排序不是简单的哈希(哈希的哈希) - 2

    我有一个这样的哈希{55=>{:value=>61,:rating=>-147},89=>{:value=>72,:rating=>-175},78=>{:value=>64,:rating=>-155},84=>{:value=>90,:rating=>-220},95=>{:value=>39,:rating=>-92},46=>{:value=>97,:rating=>-237},52=>{:value=>73,:rating=>-177},64=>{:value=>69,:rating=>-167},86=>{:value=>68,:rating=>-165},53=>{:va

随机推荐