使用元数据在提交时更新自定义字段

时间:2019-01-23 15:30:14

标签: php wordpress plugins advanced-custom-fields

该插件是与程序员合作开发的。它只有1个具有某些功能的文件,我认为它几乎完成了,但我再也无法联系到程序员了。这是代码:

<?php

// Action to execute when new review score submitted
add_action('rwp_after_saving_review', 'hk_update_review_score', 11, 2);

//add_shortcode('hkupdaterev', 'display_hk_reviews'); // test shortcode

// Action to execute when post meta score updated, then update the child pages 
add_action( 'added_post_meta', 'hk_after_post_review', 100, 4 );
add_action( 'updated_post_meta', 'hk_after_post_review', 100, 4 );

// Action after score submitted
function hk_after_post_review( $meta_id, $post_id, $meta_key, $meta_value ) {
    $hk_query = new WP_Query();
    if( $meta_key === 'rwp_user_score' ){
        // Find the child pages
        $child_pages = $hk_query->query(array(
            'post_type' => 'page',
            'post_status' => 'publish',
            'post_parent'   => $post_id,
        ));

        // Get the average score
        $score = get_post_meta( $post_id, 'rwp_user_score', true );

        // Now loop the child pages, and update the score
        foreach($child_pages as $child){
            $child_id = $child->ID;
            // update the score
            update_field('average_score_provider', $score, $child_id);
        }
    }
}

function hk_update_review_score($the_review, $meta_id){
    // Get the review meta data by meta_id
    $meta_data = get_metadata_by_mid('post',$meta_id);

    // Get the parent post_id (page ID)
    $page_id = $meta_data->post_id;

    //do_action(array( 'RWP_User_Review', 'update_postmeta_scores'), array($page_id, '0'));

    // Reviewer plugin using schedule cronjob to update the score average, so we need to calculate immediately
    $reviews = get_post_meta( intval( $page_id ), 'rwp_rating_0' );
    $reviews = is_array( $reviews ) ? $reviews : array();

    $scores = array();
    foreach ($reviews as $review) {
        if( ! isset($review['rating_score']) || !is_array($review['rating_score']) ) {
            continue;
        }
        $avg = hk_get_avg( $review['rating_score'] );
        $scores[] = $avg;
    }

    $score = hk_get_avg( $scores );

    // Update the average score
    update_post_meta( $page_id, 'rwp_user_score', $score );

}


// Calculate the average score - Taken from the Reviewer plugin, so the number should be the same.
function hk_get_avg( $scores = array() )
{
    if (!is_array($scores))
        return 1;
    if( count( $scores) == 0 )
        return 0;

    $tot = array_sum($scores);
    $avg = $tot / count( $scores );
    return $avg;
}

// Test function.
function display_hk_reviews(){
    echo "RES: <br>";
    $mid = 7691;
    $data = get_metadata_by_mid('post',$mid);
    echo "<br>Meta data: <pre>";
    print_r($data->post_id);
    echo "</pre><br>";

}

该插件应该做的是:

举一个例子: parentpage_id = 44

在每个父页面上都有一个表格,当该表格填写在meta_field(rwp_user_score)中时,就会更新。

完成后,您可以触发功能:

add_action ('rwp_after_saving_review', 'hk_update_review_score', 11, 2);

此函数必须执行的操作如下: 每个父页面都有多个子页面,每个子页面的custum字段称为(average_score_provider)。

因此,当某人用page_ID 44填写页面上的新表格时,则必须使用新分数(rwp_user_score)更新其所有child_pages中所有custom_fields average_score_provider的值。

我认为程序员非常亲密,他甚至说已经完成了。但是,当我测试它时,什么也没有发生。也许在代码中有一个小错误,为什么它不起作用。

如果有人可以轻率地看一下,那就太好了。否则,我不得不再次雇用一个新的程序员,这将是一个耻辱。

0 个答案:

没有答案