比较两个数字自定义字段

时间:2013-09-10 作者:Mister Melotte

我使用高级自定义字段,并具有custompost类型“matches”。此帖子类型包含两个字段“制定的目标”和“针对的目标”。

我想查询wordpress,只显示获胜的比赛。那么,在哪里“制定目标”>“反对目标”。

谁能帮我开始这一步吗。目标是在最后有一个统计页面。

谢谢你帮我

4 个回复
SO网友:gmazzap

如果我处在你的处境,我会用不同的方法。

只需在更新goals\\u Make时自动添加隐藏的元字段即可。

E、 g。

add_action(\'updated_postmeta\', \'update_goal_made\', 20, 4);

function update_goal_made( $meta_id, $object_id, $meta_key, $_meta_value ) {
  if ( $meta_key != \'goals-made\') return; // run only when update meta \'goals-made\'
  // get the goals-against for post
  $against = get_post_meta($object_id, \'goals-against\', true) ? : 1;
  // if \'goals-made\' > \'goals-against\' create/update a field \'_goals-won\' setted to 1
  if ( intval($_meta_value) > intval($against) ) {
    update_post_meta($object_id, \'_goals-won\', \'1\');
  } else {
    // if not delete \'_goals-won\' post meta (if exists)
    delete_post_meta($object_id, \'_goals-won\');
  }
}
现在检索帖子_goals-won 存在,只需运行元查询:

$args = (
  \'posts_per_page\' => -1,
  \'meta_query\' => array( array(\'meta_key\'=>\'_goals-won\') )
);
$won_posts = get_posts($args);
在上完成一些工作后编辑GhostToast answer 我还可以为您提供正确的SQL查询,以获得相同的结果。

global $wpdb;
$won_posts = $wpdb->get_results( "
    SELECT $wpdb->posts.* 
        FROM $wpdb->posts
    INNER JOIN $wpdb->postmeta AS mt1 ON ( $wpdb->posts.ID = mt1.post_id )
    INNER JOIN $wpdb->postmeta AS mt2 ON ( $wpdb->posts.ID = mt2.post_id )
    WHERE mt1.meta_key = \'goals-made\' 
        AND ( 
            mt2.meta_key = \'goals-against\'
            AND CAST( mt1.meta_value AS UNSIGNED ) > CAST( mt2.meta_value AS UNSIGNED )
        )
    GROUP BY $wpdb->posts.ID
" );
<小时>

Side note:

如果有人编写SQL语句来处理您的请求,请确保SQL语句的性能低于最简单的元查询(如第一次发布的查询)。

SO网友:GhostToast

我的想法是这样的,但没有经过测试,我的SQL foo相当弱:

    $test = $wpdb->get_col( $wpdb->prepare(
    "
    SELECT DISTINCT    $wpdb->posts.*
    FROM               $wpdb->posts
    INNER JOIN         $wpdb->postmeta AS mt1 ON (
         wp_posts.ID = $wpdb->postmeta.post_id
    )
    WHERE              $wpdb->postmeta.meta_key = \'goals-made\'
    AND(               mt1.meta_key = \'goals-against\'
        AND            CAST($wpdb->postmeta.meta_value AS INT) > CAST(mt1.meta_value AS INT)
    )

    "
));
这应该会返回一个post\\u id列表,然后您可以对其进行处理。但话说回来,它可能会惨败。

SO网友:kaiser

希望我没看错问题:)

$results = new WP_Query( array(
    \'post_type\'  => \'matches\',
    \'meta_query\' => array(
        array(
            \'key\'     => \'goals-made\',
            \'value\'   => (int) get_post_meta( get_the_ID(), \'goals-against\',  true ),
            \'type\'    => \'INT\',
            \'compare\' => ">",
        )
    ),
) );
if ( $results->have_posts() )
{
    while ( $results->have_posts() )
    {
        the_post();
        var_dump( $GLOBALS[\'post\'] );
    }
}
由于我们不知道您在哪里执行此查询,只需替换get_the_ID() 在…内get_post_meta() 与要比较的帖子的检索ID进行比较。

SO网友:John

也许我也不明白这个问题,因为答案对我来说是显而易见的。我假设这是一篇文章,所以您有两个自定义字段,foo和bar。

所以在代码中。。。

$foo = get_field(\'foo\');
$bar = get_field(\'bar\');
if ($foo > $bar) {
    echo \'foo is greater than bar\';
} else {
    echo \'bar is greater than foo\';
}

结束

相关推荐

如何为WP_QUERY创建灵活的抽象?

我的问题是关于php的,但它涉及wordpress,因为我正在创建一个插件。我有5个问题,每个问题有6个选择,每个问题有一个选择。现在,这个人可以从每一个选项中选择任何一个,也可以从很少的选项中选择。我已经创造了现在让我发疯的if条件,因为它已经太长了,而且会做得更进一步,就像会做出近100个组合一样。我不想这样,我知道有一种多维数组的方法,但我不是wordpress的插件或php专家。所以如果有人能帮我整理一下。$qs = $_POST[\'q1\']; $q2 = $_POST[\'q2\']

比较两个数字自定义字段 - 小码农CODE - 行之有效找到问题解决它

比较两个数字自定义字段

时间:2013-09-10 作者:Mister Melotte

我使用高级自定义字段,并具有custompost类型“matches”。此帖子类型包含两个字段“制定的目标”和“针对的目标”。

我想查询wordpress,只显示获胜的比赛。那么,在哪里“制定目标”>“反对目标”。

谁能帮我开始这一步吗。目标是在最后有一个统计页面。

谢谢你帮我

4 个回复
SO网友:gmazzap

如果我处在你的处境,我会用不同的方法。

只需在更新goals\\u Make时自动添加隐藏的元字段即可。

E、 g。

add_action(\'updated_postmeta\', \'update_goal_made\', 20, 4);

function update_goal_made( $meta_id, $object_id, $meta_key, $_meta_value ) {
  if ( $meta_key != \'goals-made\') return; // run only when update meta \'goals-made\'
  // get the goals-against for post
  $against = get_post_meta($object_id, \'goals-against\', true) ? : 1;
  // if \'goals-made\' > \'goals-against\' create/update a field \'_goals-won\' setted to 1
  if ( intval($_meta_value) > intval($against) ) {
    update_post_meta($object_id, \'_goals-won\', \'1\');
  } else {
    // if not delete \'_goals-won\' post meta (if exists)
    delete_post_meta($object_id, \'_goals-won\');
  }
}
现在检索帖子_goals-won 存在,只需运行元查询:

$args = (
  \'posts_per_page\' => -1,
  \'meta_query\' => array( array(\'meta_key\'=>\'_goals-won\') )
);
$won_posts = get_posts($args);
在上完成一些工作后编辑GhostToast answer 我还可以为您提供正确的SQL查询,以获得相同的结果。

global $wpdb;
$won_posts = $wpdb->get_results( "
    SELECT $wpdb->posts.* 
        FROM $wpdb->posts
    INNER JOIN $wpdb->postmeta AS mt1 ON ( $wpdb->posts.ID = mt1.post_id )
    INNER JOIN $wpdb->postmeta AS mt2 ON ( $wpdb->posts.ID = mt2.post_id )
    WHERE mt1.meta_key = \'goals-made\' 
        AND ( 
            mt2.meta_key = \'goals-against\'
            AND CAST( mt1.meta_value AS UNSIGNED ) > CAST( mt2.meta_value AS UNSIGNED )
        )
    GROUP BY $wpdb->posts.ID
" );
<小时>

Side note:

如果有人编写SQL语句来处理您的请求,请确保SQL语句的性能低于最简单的元查询(如第一次发布的查询)。

SO网友:GhostToast

我的想法是这样的,但没有经过测试,我的SQL foo相当弱:

    $test = $wpdb->get_col( $wpdb->prepare(
    "
    SELECT DISTINCT    $wpdb->posts.*
    FROM               $wpdb->posts
    INNER JOIN         $wpdb->postmeta AS mt1 ON (
         wp_posts.ID = $wpdb->postmeta.post_id
    )
    WHERE              $wpdb->postmeta.meta_key = \'goals-made\'
    AND(               mt1.meta_key = \'goals-against\'
        AND            CAST($wpdb->postmeta.meta_value AS INT) > CAST(mt1.meta_value AS INT)
    )

    "
));
这应该会返回一个post\\u id列表,然后您可以对其进行处理。但话说回来,它可能会惨败。

SO网友:kaiser

希望我没看错问题:)

$results = new WP_Query( array(
    \'post_type\'  => \'matches\',
    \'meta_query\' => array(
        array(
            \'key\'     => \'goals-made\',
            \'value\'   => (int) get_post_meta( get_the_ID(), \'goals-against\',  true ),
            \'type\'    => \'INT\',
            \'compare\' => ">",
        )
    ),
) );
if ( $results->have_posts() )
{
    while ( $results->have_posts() )
    {
        the_post();
        var_dump( $GLOBALS[\'post\'] );
    }
}
由于我们不知道您在哪里执行此查询,只需替换get_the_ID() 在…内get_post_meta() 与要比较的帖子的检索ID进行比较。

SO网友:John

也许我也不明白这个问题,因为答案对我来说是显而易见的。我假设这是一篇文章,所以您有两个自定义字段,foo和bar。

所以在代码中。。。

$foo = get_field(\'foo\');
$bar = get_field(\'bar\');
if ($foo > $bar) {
    echo \'foo is greater than bar\';
} else {
    echo \'bar is greater than foo\';
}

相关推荐

如何读取WordPress$Query关联数组(散列)键的值

WordPress编程新手(来自更为传统的环境),并试图了解其一些“独特”特性。我们的网站上有一个目录页,此代码驻留在functions.php, 如果条件为true,则调整结果。if( $query->is_post_type_archive( \'directory\' ) ){ ...//do stuff } 我想知道如何获取is_post_type_archive 这就是“目录”当我对值使用测试时。。。var_dumb($query->is_post