动态生成用户元字段

时间:2013-12-25 作者:Dr.Hariri

我有一个使用WordPress的在线教育网站。我有一个名为“课程”的自定义帖子类型,它是通过我使用的“WooThemes Sensei”电子学习插件自动创建的。

我仍处于早期阶段,但我想跟踪的一个重要方面是users\' participation in courses. 为此,我希望能够自动为每个单独的课程创建元字段。在每个字段中,我希望有3个无线电选项:未开始、开始和完成。

然后,我将该函数挂接到另一个函数,该函数与用户完成课程以更新此元字段相关。

我不是程序员,当然不知道这是否可能。我已经搜索了数周,阅读了许多关于用户元域的在线文章,但没有找到一些关于如何做到这一点的内容。

So to sum up:- 自定义帖子类型=课程。-当我发布课程时,我想使用course slug创建一个新的用户元字段。但我怎么能只做一次呢?我可能会尝试一些“如果不存在”的东西对于每个自动生成的元字段,有3个选项:未开始、已开始、已完成。

我试图提供帮助,并表明我在发帖前对此做了一些研究,但如果真的是一团糟,我深表歉意!

我尝试了以下代码,它输出的表单很好,但是it doesn\'t show the correct saved value, I suspect it has to do with $course_meta_name not working outside the loop 在顶部,但我不太擅长编码,我还没有找到一种方法来为$课程正确定义它。任何帮助都将不胜感激!

任何评论都非常感谢,希望这对其他人有用。

    function educadme_courses_for_user( $user ) {   
$courses_args = array(
\'status\' => \'approve\',
\'post_type\' => \'course\',
            );
$courses = get_posts($courses_args);
$slug = $post->post_name;
$course_meta_name = $slug;
$course_for_user = get_the_author_meta( $course_meta_name, $user->ID);
?>
<h3><?php _e(\'الكورسات في الأكاديمية\'); ?></h3>
<span class="description">سجل بالكورسات التي شارك فيها أو أنجزها المشارك.</span><br>
<table class="form-table">
    <tr>                    
                <td>

                        <table>                         
                            <?php
                                foreach($courses as $post) {
                                    $slug = $post->post_name; 
                                    $course_title = $post->post_title;                 
                                     ?>
                                     <tr>
                                     <th style="border-bottom: 1px solid #000;">
                                         <label for="<?php echo $slug; ?>">
                                         <?php echo $course_title; ?>
                                         </label>
                                         <br>
                                         <span class="description" style="font-weight:bold;"><?php echo $slug; ?></span>
                                     </th>
                                     <td style="border-bottom: 1px solid #000;">                                         
                                     <label><input type="radio" name="<?php echo $slug; ?>" <?php if ($course_for_user == \'Did not start\' OR $course_for_user == \'\' ) { ?>checked="checked"<?php }?> value="Did not start" />لم يبدأ</label><br />
                                    <label><input type="radio" name="<?php echo $slug; ?>" <?php if ($course_for_user == \'Started\' ) { ?>checked="checked"<?php }?> value="Started" />بدأ في الكورس</label><br />
                                    <label><input type="radio" name="<?php echo $slug; ?>" <?php if ($course_for_user == \'Finished\' ) { ?>checked="checked"<?php }?> value="Finished" />إنتهى من الكورس</label><br /> 
                                     </td>
                                     </tr>
                                <?php } ?>
                        </table>
                </td>
    </tr>
</table>
<?php } ?>


<?php
function save_educadme_courses_for_user( $user_id ) {
if ( !is_super_admin() AND !current_user_can( \'edit_user\', $user_id ) )
    return FALSE;
update_usermeta( $user_id, $course_meta_name, $_POST[$course_meta_name] );
}           

add_action( \'show_user_profile\', \'educadme_courses_for_user\' );
add_action( \'edit_user_profile\', \'educadme_courses_for_user\' );
add_action( \'personal_options_update\', \'save_educadme_courses_for_user\' );
add_action( \'edit_user_profile_update\', \'save_educadme_courses_for_user\' );

1 个回复
最合适的回答,由SO网友:Dr.Hariri 整理而成

在得到PHP开发人员的一些帮助后,上面的主代码似乎已经完成,但进行了某些更改。以下是相关人员的代码。在此代码中,自定义帖子类型为:Course。如果需要自己使用,请相应更改。

function save_educadme_courses_for_user( $user_id ) {

if ( !current_user_can( \'edit_user\', $user_id ) ) { return false; }

$args=array(\'post_type\' => \'Course\');
$allposts = get_posts( $args );

foreach ( $allposts as $post ) {
update_user_meta( $user_id, $post->post_name, $_POST[$post->post_name] );
}//end of master loop

}           


function educadme_courses_for_user( $user ) {   ?>



<h3> <?php echo $post->post_name; ?> </h3>
<span class="description">   description (what courses have you taken) </span><br>
<table class="form-table">
    <tr>
                <td>
                    <table>                         
        <?php $args=array(\'post_type\' => \'Course\');
                    $allposts = get_posts( $args );
                    foreach ( $allposts as $post ) { ?>
        <tr>
        <th style="border-bottom: 1px solid #000;">
        <label for="<?php echo $post->post_name; ?>"><?php echo $post->post_name; ?> (currently: <?php echo esc_attr( get_the_author_meta($post->post_name , $user->ID )); ?>)</label>
        <br>
        <span class="description" style="font-weight:bold;"></span>
        </th>
        <td style="border-bottom: 1px solid #000;">                                      
<input type="radio" name="<?php echo $post->post_name; ?>" value="Did not start" <?php if(esc_attr( get_the_author_meta( $post->post_name , $user->ID ))==\'Did not start\' || esc_attr( get_the_author_meta( $post->post_name , $user->ID ))==\'\'){ echo \'checked\'; } ?> /><label>Did not start</label>
<input type="radio" name="<?php echo $post->post_name; ?>" value="Started" <?php if(esc_attr( get_the_author_meta( $post->post_name , $user->ID ))==\'Started\'){ echo \'checked\'; } ?> /><label>Started</label>
<input type="radio" name="<?php echo $post->post_name; ?>" value="Finished" <?php if(esc_attr( get_the_author_meta( $post->post_name , $user->ID ))==\'Finished\'){ echo \'checked\'; } ?> /><label>Finished</label>
        </td>
        </tr>
                    <?php } ?>
        </table>
            </td>
    </tr>
</table>

<?php }//end of function 


add_action( \'show_user_profile\', \'educadme_courses_for_user\' );
add_action( \'edit_user_profile\', \'educadme_courses_for_user\' );
add_action( \'personal_options_update\', \'save_educadme_courses_for_user\' );
add_action( \'edit_user_profile_update\', \'save_educadme_courses_for_user\' );
我已经用上面的代码进行了一些初始测试,它似乎可以工作。我希望这有帮助!

结束

相关推荐

WP_Query in functions.php

我有一些代码要转换成函数。它工作得很好,直到我将其包装到所述函数中: $args = array( \'posts_per_page\' => -1, \'post_type\' => \'asset\', \'category_name\' => $cat ); $cat_query = new WP_Query( $args );