2012-11-01 73 views
0

我在WP中有一個自定義的帖子類型叫'work',每次自定義字段'socialmedia'的值爲'yes'時都需要發送一封郵件給管理員。以下代碼發送的郵件很好但郵件中不包含自定義字段值:Wordpress get_post_meta()在functions.php中不起作用

function email_members($post_ID) { 
global $post; 
if ('work' == get_post_type($post_ID)){ 
    $social = get_post_meta($post_ID, 'socialmedia', true); 
    mail('[email protected]', get_the_title($post_ID), $social); 
} 
return $post_ID; 
} 

add_action('publish_work', 'email_members'); 

任何想法?

感謝

+0

你確定這個帖子的密鑰'socialmedia'有一個元值嗎? – doublesharp

回答

0

如果您已經通過函數傳遞$ POST_ID,什麼是全球性的意義呢?如何...

if(get_post_type($post_ID) === "work"){ 
    // do stuff 
} 

確保它確實返回「工作」與...

var_dump(get_post_type($post_ID); 

而且,除非我們知道你在哪裏使用該功能。 E.g在循環中,循環之外?我們無法真正幫助很多或很好,我無法真正幫助很多。

+1

嗨,感謝您的回覆。該功能用於發佈工作帖子時,即帖子發佈時,只有'社交媒體'已被標記爲'是'時才應發送電子郵件, – badcoder

1

擺脫global $post(似乎並未使用),並添加一些var_dump();行來準確顯示您的變量包含哪些內容,從而幫助您指出錯誤。

此外,如果socialmedia爲'是',但是您沒有在代碼中檢查該內容,您提到要發送電子郵件嗎?

function email_members($post_ID) { 

    var_dump($post_ID); 
    var_dump(get_post_type($post_ID)); 

    if ('work' == get_post_type($post_ID)){ 

     $social = get_post_meta($post_ID, 'socialmedia', true); 
     var_dump($social); 

     if ($social === 'yes') { 
      mail('[email protected]', get_the_title($post_ID), $social); 
     } 

    } 

    die(); // Remove this after testing, it'll stop WP redirecting you so you can see what your variables contain. 

    return $post_ID; 
} 

add_action('publish_work', 'email_members'); 
1

在發送電子郵件之前檢查元值。

if('yes' == ($social = get_post_meta($post_ID, 'socialmedia', true))) 
{ 
    mail('[email protected]', get_the_title($post_ID), $social); 
}