你做错了几件事,它们都是愚蠢的、可以避免的、基本的逻辑错误。
首先,您没有检查这是否是自动保存。自动保存不保存自定义字段,只保存原始核心wordpress字段,如内容,因此自动保存将为您提供未设置/空白值。
将其添加到保存功能的顶部:
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
return;
接下来,你打电话
get_post_type
没有参数。通常,如果您在post循环中,这是可以的,但您没有,因此您无法获取已保存帖子的帖子类型(可能)。添加post id作为参数,例如:
if(get_post_type($post_id) == \'tribe_events\') {
随后立即在以下行:
$meta = get_post_meta($post_id, $_artistMeta->$post_id, TRUE);
我看不到变量的定义或声明
$_artistMeta
, 我只能假设它是一个全局值,但甚至没有
global $_artistMeta;
. $_artistMeta不在此范围内定义,如果不是为了可读性,而是为了弹性/鲁棒性,您应该立即修复此问题。如果
$_artistMeta
是全局变量,请将其定义为全局变量,如果不是,请为变量指定一个值,使其不是全局变量
null
.
再往下看,我们看到了与前面相同的错误:
$event_link = get_permalink();
应该是
$event_link = get_permalink($post_id);
如果向下滚动,我们会看到:
$eventStartDate = tribe_get_start_date($postID,false,\'j\');
$eventStartMonth = tribe_get_start_date($postID,false,\'M\');
$event_sort = tribe_get_start_date($postID,false,\'Y-m-d\');
$postID
此处未定义,我假设您指的是正在保存的帖子,因此将其更改为:
$eventStartDate = tribe_get_start_date($post_id,false,\'j\');
$eventStartMonth = tribe_get_start_date($post_id,false,\'M\');
$event_sort = tribe_get_start_date($post_id,false,\'Y-m-d\');
最后,启动一个查询以获取类型为
artistas
, 但是:
你没有检查是否真的找到了任何帖子,你只是假设并开始一个循环if(!empty($artistas)){
您以后不会使用重置post数据wp_reset_postdata
这意味着之后执行的任何代码都没有使用正确的$post对象,并且将被破坏。在进行查询时,请务必清理干净$post
到setup_postdata
呼叫,但这是不正确的。你想愚弄$artista
post,而不是保存的post,传递$post毫无意义我的印象是,您要么没有阅读代码,要么没有尝试调试代码,要么PHP语言技能不足,无法完全理解代码的实际功能。
我建议:
阅读WP_Query
类,并在您想要执行帖子循环和获取任何帖子时使用它。它比get_posts()
, 而且语法更容易识别。This page has a lot of examples阅读PHP错误日志中的警告并打开WP_DEBUG
. 它是发展的宝贵工具例如,请先阅读wordpress codex。它们有一些警告和额外的步骤,这些对于使教程和文章有时遗漏的内容正常工作非常重要注释您的代码并重新阅读Read this short page on what PHP variable scope is