spot_img
HomeJoomla教程Joomla教程菜鸟教程 如何按自定义字段对 WordPress 自定义帖子类型的管理区域进行排序

Joomla教程菜鸟教程 如何按自定义字段对 WordPress 自定义帖子类型的管理区域进行排序

JasperAI 10000字免费额度试用

在编辑我的自定义帖子类型之一时,我希望能够按自定义字段而不是发布日期列出所有条目(这对于自定义帖子类型可能不相关)。 我从一篇关于自定义帖子类型的博客文章的评论中得到了线索,作者说这是可能的,他甚至做到了,所以你可以点击列名进行自定义排序。 他提到了 posts_orderby 我在自己的评论中提到的功能,但现在我可以再找到博客文章了。 有什么建议么? 我看到了一种使用的解决方案

add_action('wp', 'check_page');

check_page 使用的功能 add_filter 更改查询,但我很确定它只适用于主题文件,而不适用于管理区域。

WordPress divi主题

由于没有提供答案,您可能会想到,解决方案并非微不足道。 我所做的是创建一个有点独立的示例,该示例假定自定义帖子类型为“movie” 和 ” 的自定义字段键类型”。

免责声明: 这适用于 WP3.0,但我不能确定它是否适用于早期版本。

您基本上需要挂两 (2) 个挂钩才能使其正常工作,另外需要挂两 (2) 个挂钩才能使其明显有用。

第一个钩子是 ‘restrict_manage_posts‘ 这让你发出一个 HTML <select> 在帖子列表上方的区域中,“批量操作“ 和 ”显示日期” 过滤器。所提供的代码将生成 “排序方式:” 在此屏幕片段中看到的功能:

如何在 WordPress 管理员中为自定义帖子类型创建排序依据功能
(来源:mikeschinkel.com)

该代码使用直接 SQL,因为没有 WordPress API 函数来提供帖子类型的所有 meta_keys 的列表(对我来说听起来像是未来的 trac 票……)无论如何,这是代码。 请注意,它从中获取帖子类型 $_GET 并验证以确保它都是有效的帖子类型 post_type_exists() 以及作为 movie 帖子类型(这两项检查有点矫枉过正,但我​​这样做是为了向您展示如果您不想对帖子类型进行硬编码。)最后我使用 sortby URL 参数,因为它与 WordPress 中的任何其他内容都不冲突:

add_action('restrict_manage_posts','restrict_manage_movie_sort_by_genre');
function restrict_manage_movie_sort_by_genre() {
    if (isset($_GET['post_type'])) {
        $post_type = $_GET['post_type'];
        if (post_type_exists($post_type) && $post_type=='movie') {
            global $wpdb;
            $sql=<<<SQL
SELECT pm.meta_key FROM {$wpdb->postmeta} pm
INNER JOIN {$wpdb->posts} p ON p.ID=pm.post_id
WHERE p.post_type="movie" AND pm.meta_key='Genre'
GROUP BY pm.meta_key
ORDER BY pm.meta_key
SQL;
            $results = $wpdb->get_results($sql);
            $html = array();
            $html[] = "<select id=\"sortby\" name=\"sortby\">";
            $html[] = "<option value=\"None\">No Sort</option>";
            $this_sort = $_GET['sortby'];
            foreach($results as $meta_key) {
                $default = ($this_sort==$meta_key->meta_key ? ' selected="selected"' : '');
                $value = esc_attr($meta_key->meta_key);
                $html[] = "<option value=\"{$meta_key->meta_key}\"$default>{$value}</option>";
            }
            $html[] = "</select>";
            echo "Sort by: " . implode("\n",$html);
        }
    }
}

第二个必需的步骤是使用 parse_query 在 WordPress 决定应该运行什么查询之后但在运行查询之前调用的钩子。 在这里我们设置值 orderbymeta_key 在查询的 query_var 在 Codex 中记录的数组 orderby 参数为 query_posts(). 我们进行测试以确保:

  1. 我们在管理员(is_admin()),
  2. 我们在列出管理员帖子的页面上($pagenow=='edit.php'),
  3. 该页面已被调用 post_type 网址参数等于 movie, 和
  4. 该页面也被称为 sortby URL 参数并且它没有传递值 ‘没有任何

如果所有这些测试都通过了,我们就设置 query_vars (如此处记录)到 meta_value 和我们的 sortby ‘的价值类型‘:

add_filter( 'parse_query', 'sort_movie_by_meta_value' );
function sort_movie_by_meta_value($query) {
    global $pagenow;
    if (is_admin() && $pagenow=='edit.php' &&
        isset($_GET['post_type']) && $_GET['post_type']=='movie' && 
        isset($_GET['sortby'])  && $_GET['sortby'] !='None')  {
        $query->query_vars['orderby'] = 'meta_value';
        $query->query_vars['meta_key'] = $_GET['sortby'];
    }
}

这就是您需要做的; 不 ”posts_order“ 或者 ”wp” 需要钩子!当然你实际上需要做更多;你需要在你的页面上添加一些列来列出帖子,这样你才能真正看到它排序的值,否则用户会很困惑。所以添加一个 manage_{$post_type}_posts_columns 钩子,在这种情况下 manage_movie_posts_columns. 这个钩子通过了默认的列数组,为了简单起见,我只是用两个标准列替换了它; 一个复选框(cb) 和职位名称 (title). (你可以检查 posts_columnsprint_r() 查看默认情况下还有什么可用。)

我决定添加一个“排序:“因为当有 sortby URL 参数以及何时不是 None:

谷歌SEO优化服务
add_action('manage_movie_posts_columns', 'manage_movie_posts_columns');
function manage_movie_posts_columns($posts_columns) {
    $posts_columns = array(
        'cb' => $posts_columns['cb'],
        'title' => 'Movie Name',
        );
    if (isset($_GET['sortby']) && $_GET['sortby'] !='None') 
        $posts_columns['meta_value'] = 'Sorted By';

    return $posts_columns;
}

最后我们使用 manage_pages_custom_column 挂钩以在有适当帖子类型的帖子时实际显示该值,并且可能有多余的测试 is_admin()$pagenow=='edit.php'. 当有一个 sortby URL 参数我们提取正在排序的自定义字段值,并将其显示在我们的列表中。 这是它的样子(请记住,这是测试数据,所以 peanut gallery 没有关于电影分类的评论!:):

在 WordPress 管理员中为自定义帖子类型添加了自定义列
(来源:mikeschinkel.com)

这是代码:

add_action('manage_pages_custom_column', 'manage_movie_pages_custom_column',10,2);
function manage_movie_pages_custom_column($column_name,$post_id) {
    global $pagenow;
    $post = get_post($post_id);
    if ($post->post_type=='movie' && is_admin() && $pagenow=='edit.php')  {
        switch ($column_name) {
            case 'meta_value':
                if (isset($_GET['sortby']) && $_GET['sortby'] !='None') {
                    echo get_post_meta($post_id,$_GET['sortby'],true);
                }
                break;
        }
    }
}

请注意,这只会拾取第一个“类型“ 为一个 movie,即在给定键的多个值的情况下的第一个元值。 但是话又说回来,我不确定它会如何工作!

对于那些不熟悉把这段代码放在哪里的人,你可以把它放在一个插件中,或者对于新手来说更可能是 functions.php 文件在您当前的主题中。

H10的年终大促

这有什么帮助。

从 WordPress 3.1(我使用的是测试版)开始,列现在可以通过它们的标题进行排序。

以下帖子详细介绍了如何实现它们。

http://scribu.net/wordpress/custom-sortable-columns.html

5分钟生成10篇英文软文article forge软件试用
跨境电商独立站代运营服务综合套餐项目合作请联系客服微信 13564054264
服务项目服务模块服务效果服务周期服务费用 RMB
海外市场调研
与品牌诊断
目标市场调研1份调研报告按次(5-7个工作日)5000
消费受众分析
市场准入条件
竞品发展轨迹
市场销售策略
品牌商业化诊断
TikTok
账号代运营
TikTok账号定位3个账号运营
500条视频内容发布
按季度(50-65个工作日)30000
TikTok内容策划
TikTok视频制作
TikTok账号涨粉
TikTok数据分析
TikTok
直播代运营
TikTok直播策划20-24场直播按月度(20-24个工作日)15000
TikTok网络搭建
TikTok选品分析
TikTok话术提炼
TikTok直播开展
TikTok直播数据分析
TikTok
KOL/KOC营销
TikTok行业达人匹配500-1000个达人邀约/天按月度(20-24个工作日)10000
TikTok行业达人邀约
TikTok行业达人签约
TikTok达人合作跟进
TikTok达人合作完成
海外社媒
代运营
海外社媒运营需求确认insgarm
Facebook
Pinterest
Linkedln
海外社媒运营(4选2)
按季度(50-65个工作日)30000
海外社媒运营方案制订
海外社媒代运营开展
海外社媒活动策划&开展
海外社媒账户涨粉&数据分析
海外线下
代理商拓展
渠道代理目标市场确认主要服务地区为欧美/东南亚
限定1-3个国家
按季度(50-65个工作日)35000
渠道代理商信息抓取
渠道代理商邮件邀约
渠道代理商洽谈准备
渠道代理商签约合作
渠道代理商完成合作
海外广告代投放海外广告账户开户TikTok
Google
Facebook
海外广告代投
(电商/游戏)
按季度(50-65个工作日)开户首充1000美金
10%广告投放佣金
海外广告产品分析
海外广告代投计划制订
海外广告代投内容制作
海外广告代投放开展
海外广告代投效果优化项目合作请联系客服微信 13564054264
siteground

【WordPress花园提醒您】如果想购买国外正版WordPress主题和插件,您需要一张VISA信用卡才能支付,这里我们推荐光大银行信用卡!赶快免费申请,别耽误了买插件哦!

guangda
WordPress花园官方账号
WordPress花园隶致力于为广大跨境电商和独立站爱好者提供优质的WordPress教程、Woocommerce教程、Facebook、Twitter、tiktok、Instagram教程和谷歌SEO教程等资料和对应的建站推广服务。关注‘哟派出海’公众号了解最新资讯。粉丝福利:Shopline免费独立站建设14天优惠 商务合作: [email protected]
RELATED ARTICLES