自定义查询字段-更改元值

时间:2012-06-18 作者:Zach

我在给Custom Query Fields 用于筛选/排序站点前端帖子的快照。这些说明似乎不言自明,但我确实有另一个层面,我正在努力弄清楚。

对于我的一个自定义字段,它当前存储的是一个小数。我正在控制输入,因此只有以下值3 3/41/5 接受(不破坏任何类型的分数格式)。这是由于需要在站点上显示值的方式以及所需的特殊性(这些是针对产品尺寸的)。然后,我使用一个数据属性,运行以下函数将分数转换为十进制:

function fraction_to_decimal($input) {
    $fraction = array(\'whole\' => 0);
    preg_match(\'/^((?P<whole>\\d+)(?=\\s))?(\\s*)?(?P<numerator>\\d+)\\/(?P<denominator>\\d+)$/\', $input, $fraction);
    if (isset($fraction[\'denominator\']) && isset($fraction[\'numerator\'])) {
        $result = $fraction[\'whole\'] + $fraction[\'numerator\']/$fraction[\'denominator\'];
        return $result;
    }
    else {
        return $input;
    }
}
我之所以在前端显示器上而不是在管理中这样做,有两个原因:

方便用户输入(按正常方式输入分数)

  • 从分数到小数符合我对使用http://isotope.metafizzy.co/Custom Query Fields 我的兴趣是从设置中删除同位素,并更多地依赖核心WordPress过滤/排序功能。

    所以-关于实际问题

    由于我的meta\\u值存储为“断开的”整数,3 3/5 在运行该函数之前,是否有办法截取自定义查询字段的元值解释,以获取十进制值?谢谢你的帮助!

  • 2 个回复
    最合适的回答,由SO网友:Zach 整理而成

    我最终做的是将我需要的数据存储在post_meta 保存时的表格:

    add_action( \'save_post\', \'mouldings_hidden_postmeta\' );
    
    function mouldings_hidden_postmeta() {
        global $post;
        if (is_admin() && (get_post_type() == \'moulding_profiles\' || get_post_type() == \'moulding_combination\')) {
            $mouldings_meta_keys = array(
                \'_mouldings_dimensions_width\',
                \'_mouldings_dimensions_height\',
                \'_mouldings_projection_width\',
                \'_mouldings_projection_height\'
            );
            foreach ($mouldings_meta_keys as $mouldings_meta_key) {
                if(get_post_type() == \'moulding_profiles\' && ($mouldings_meta_key == \'_mouldings_projection_width\' || $mouldings_meta_key == \'_mouldings_projection_height\')) {
                    continue;
                }
                if(!get_post_meta($post->ID, $mouldings_meta_key)) {
                    add_post_meta($post->ID, $mouldings_meta_key, fraction_to_decimal(get_field(str_replace(\'_mouldings_\', \'mp_profile_\', $mouldings_meta_key))));
                }
                else {
                    update_post_meta($post->ID, $mouldings_meta_key, fraction_to_decimal(get_field(str_replace(\'_mouldings_\', \'mp_profile_\', $mouldings_meta_key))));
                }
            }
        }
    }
    

    SO网友:Stephen Harris

    我简要介绍了该插件,它没有提供挂钩,但您可以使用posts_clauses 钩子以更改查询。也就是说,我的SQL不足以说明如何(如果可能的话)在排序之前将“人类可读”的值转换为十进制。

    即使可以,我的建议是以十进制格式存储该值,然后在向用户显示时将其转换为“人类可读的形式”。

    结束