PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP-如何在WordPress中按缩略图的顺序排序?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

客户要求我按缩略图顺序对帖子排序,因此我需要先按缩略图对帖子进行排序,然后再按不按缩略图的顺序对帖子进行排序.

这是我的代码

$the_query = new WP_Query(array(
               'post_type' => 'veiculos',
               'posts_per_page'=> -1,
               'Meta_key' => '_thumbnail_id',
               'orderby' => 'Meta_value_num',
               'order' => 'DESC',
               'tax_query' => array(
                 array(
                   'taxonomy' => 'categoria-veiculo',
                   'field' => 'id',
                   'terms' => 5
                 )
               )
           ));

但是发生的是,当我放置Meta_key时,没有缩略图的帖子不显示.

解决方法:

这是一个有趣的问题. wordpress当前还没有一种方法可以使用内置的WP_Query方法一个查询获取所有带有缩略图和没有缩略图的帖子.但是我们可以为此做一个破解,可能不是我认为的最好,但可以使用:)

将此功能添加主题的functions.PHP文件

function remove_Metakey ($where) {

    global $wpdb;

    $where = str_replace("AND (".$wpdb->postMeta.".Meta_key = '_thumbnail_id' )", "", $where);

    return $where;
}

调用新的WP_Query对象之前添加此过滤器

add_filter ('posts_where_request', 'remove_Metakey');

因此完整的内容将如下所示:

add_filter ('posts_where_request', 'remove_Metakey');

$the_query = new WP_Query(array(
               'post_type' => 'veiculos',
               'posts_per_page'=> -1,
               'Meta_key' => '_thumbnail_id',
               'orderby' => 'Meta_value_num',
               'order' => 'DESC',
               'tax_query' => array(
                 array(
                   'taxonomy' => 'categoria-veiculo',
                   'field' => 'id',
                   'terms' => 5
                 )
               )
           ));

您必须在调用WP_QUery对象之前添加过滤器,否则它将无法正常工作.也不要在您的functions.PHP文件添加此过滤器,因为这样,在进行posts_where_request时,它将被呈现.

这是在我们使用WP_Query对象执行查询时,它调用posts_where_request.我们将自己的函数与posts_where_request挂钩.因此,在调用posts_where_request时,将渲染我们的函数.在我们的函数中,我们使用str_replace替换$where值中的Meta_key部分并返回它.这将删除查询中位于何处的Meta_key条件.

更新:

我找到了使用wordpress挂钩从其中条件中删除元密钥的正确方法.这是一种更好,更清洁的方法

调用WP_Query对象之前,请添加此挂钩.代替以前的钩子,使用它.

add_filter ('get_Meta_sql', 'remove_Metakey');

现在,用以下代码替换以前的功能

function remove_Metakey ($array) {

    $array['where'] = ''; //you can also use unset, but setting the value to null is better to avoid warnings

    return $array;
}

完整的内容将是:

add_filter ('get_Meta_sql', 'remove_Metakey');

$the_query = new WP_Query(array(
               'post_type' => 'veiculos',
               'posts_per_page'=> -1,
               'Meta_key' => '_thumbnail_id',
               'orderby' => 'Meta_value_num',
               'order' => 'DESC',
               'tax_query' => array(
                 array(
                   'taxonomy' => 'categoria-veiculo',
                   'field' => 'id',
                   'terms' => 5
                 )
               )
           ));

这是正确的方法.它将where值设置为null,从而防止在SQL查询中出现其他元键条件.

请记住,仅在需要时才添加此过滤器.也不要在functions.PHP添加它,否则它将在每次调用get_Meta_sql函数时执行.

希望这对您有所帮助:)

大佬总结

以上是大佬教程为你收集整理的PHP-如何在WordPress中按缩略图的顺序排序?全部内容,希望文章能够帮你解决PHP-如何在WordPress中按缩略图的顺序排序?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: