如何更新包含许多选项的WordPress wp_postmeta_Value

时间:2017-11-10 作者:Googlygoo

我正在从事一个LearnDash项目,我有一个WordPress多站点,主网站包含LearnDash课程,子网站是门户网站。

课程从门户网站购买,购买后,学生将直接从门户网站转到主站点“我的帐户”页面。在该页面上,他们有一个使用LearnDash简介短代码的课程链接。

当学生单击链接时,列出课程所有部分的课程表将打开,但当他们单击任何链接而不是打开时,什么都不会发生(因为他们没有访问权限)。

该课程在用户的WordPress配置文件“用户注册课程”部分中列出。我遇到的问题是,除非学生的用户ID手动添加到课程访问列表中(编辑课程时,它位于课程,课程访问列表中),否则学生无权访问课程。

如果课程是在课程所在的主站点1上购买的,则没有问题,学生可以访问课程。

我正在寻找一种短期解决方案,在该方案中,对于学生注册的每门课程,用户ID都会自动添加到课程访问列表中。

我尝试将以下内容添加到函数中。php(只是在我的开发系统上进行测试,看看是否可以更新meta\\u值)

`add_action( \'loop_start\', \'your_function\' );
function your_function() {
$course_id = 1646;
$metas = array( 
    \'_sfwd-courses_course_access_list\'   => \'126\',
);
foreach($metas as $key => $value) {
    update_post_meta( $course_id, $key, $value );
}`
但它不起作用,主要是因为我不应该从函数中尝试。我怀疑是因为meta\\u值包含许多选项,而且不仅仅是添加update\\u post\\u meta行。

以下是wp\\u Posteta,meta\\u值:

a: 15:{s:37:“sfwd-courses\\u course\\u short\\u description”;s:0:;s:29:“sfwd-courses\\u course\\u materials”;s:0:;s:30:“sfwd-courses\\u price\\u type”;s:4:“open”;s:30:“sfwd-courses\\u custom\\u button\\u url”;s:0:;s:25:“sfwd-courses\\u course\\u price”;s:0:;s:31:“sfwd-courses\\u course\\u access\\u list”;s:13:“9,11,13,15,14”;s:34“sfwd-courses\\u course\\u lesson\\u orderby”;s:10:“menu\\u order”;s:32:“sfwd-courses\\u course\\u lesson\\u order”;s: 3:“ASC”;s: 40:“sfwd-courses\\u course\\u prerequisite\\u compare”;s: 3:“任何”;s: 26:“sfwd-courses\\u course\\u points”;s: 1:“0”;s: 33:“sfwd-courses\\u course\\u points\\u access”;s: 1:“0”;s: 31:“sfwd-courses\\u expire\\u access\\u days”;s: 0:“”;s: 24:“sfwd-courses\\U证书”;s: 4:“1565”;s: 40:“sfwd-courses\\u course\\u prerequisite\\u enabled”;s: 3:“关”;s: 32:“sfwd-courses\\u course\\u prerequisite”;a: 0:{}}

我确实在LearnDash的个人资料中找到了一个位置。php,其中的代码是列出学生购买的课程,并在“我的帐户”仪表板中调用该代码,学生在仪表板中单击链接访问课程。

        <?php foreach ( $user_courses as $course_id ) : ?>
            <?php
                $course = get_post( $course_id);

                $course_link = get_permalink( $course_id );

                $progress = learndash_course_progress( array(
                    \'user_id\'   => $user_id,
                    \'course_id\' => $course_id,
                    \'array\'     => true
                ) );

                $status = ( $progress[\'percentage\'] == 100 ) ? \'completed\' : \'notcompleted\';
            ?>
我只需要找到一个方法来更新sfwd-courses\\u course\\u access\\u list meta\\u值。我尝试在$course=get\\u post($course\\u id)下面直接添加以下内容;

$course_id = 1646;
$metas = array( 
    \'_sfwd-courses_course_access_list\'   => \'126\',
);
foreach($metas as $key => $value) {
    update_post_meta( $course_id, $key, $value );
}
以上这些都不起作用,我到处寻找答案,完全被卡住了。我的问题是,在这种情况下,更新meta\\u值的正确方法是什么?

1 个回复
SO网友:Drupalizeme

您试图做的是访问序列化对象中的属性。嗯,这不能直接下降。您拥有的数据已序列化,这就是为什么要使用_sfwd-courses_course_access_list 将不起作用,因为这仅在条目的meta\\u值内。

您必须取消序列化更新,然后使用update_post_meta 作用

结束

相关推荐

SQL database export-import

我开发的网站包含WordPress博客以及我设计的其他PHP页面。当我在测试服务器上本地更改站点时,我使用myPHPAdmin进行SQL数据库转储。如何避免覆盖客户端WordPress日历条目和其他日历设置的内容?如果我只是在localhost db dump上取消选择日历表,那么在导入之后,客户端的db会维护远程服务器上表的这些客户端条目吗?提前感谢