GET_POST_META未将变量用作POST_ID以动态获取POSSID

时间:2018-10-10 作者:MFWebMaster

我想使用get\\u post\\u meta从CPT中动态提取一个值,然后发送一封电子邮件。

问题是get\\u post\\u meta($post->ID,…)部分代码无法从CPT metabox中提取电子邮件。如果将$post->ID替换为post ID示例“254”,则整个函数工作正常。有没有办法让get\\u post\\u meta动态使用post ID

    <?php
    ////////////////////////////////////////////////////////////////////
    // Fire mail on post page and CPT
    ////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////
    //  Add Hooks for Email 
    ////////////////////////////////////////////////////////////////////
    add_action(\'new_to_publish\', \'send_emails_on_new_event\');
    add_action(\'post_updated\', \'send_emails_on_new_event\');

    ////////////////////////////////////////////////////////////////////
    //  SET EMAIL FROM ADDRESS
    ////////////////////////////////////////////////////////////////////
    function change_mail_from() {
        return "[email protected]";
    }
        add_filter ("wp_mail_from", "change_mail_from");

    ////////////////////////////////////////////////////////////////////
    //  SET EMAIL FROM NAME
    ////////////////////////////////////////////////////////////////////
    function change_from_name() {
        return "Some Where";
    }
    add_filter ("wp_mail_from_name", "change_from_name");

    ////////////////////////////////////////////////////////////////////
    //  SET EMAIL TYPE TO HTML
    ////////////////////////////////////////////////////////////////////
    function wpse27856_set_content_type(){
        return "text/html";
    }
    add_filter( \'wp_mail_content_type\',\'wpse27856_set_content_type\' );

    ////////////////////////////////////////////////////////////////////
    //  Send emails on event publication
    ////////////////////////////////////////////////////////////////////
    function send_emails_on_new_event($post_id)
    {
        $post                   =   get_post($post_id);
        $post_id                =   $post->ID;
        $post_type              =   \'CPT name\'; //post, page, attachment or         
    whatever other CPT you may have
        $author                 =   get_userdata($post->post_author);
        $author_id              =   $author->ID;
        $extra_email            =   get_post_meta($post->ID,     \'_metabox_flied_from_CPT_with_extra_email\', true);
        $admin_email            =   get_option(\'admin_email\');
    $emails                 =   "$admin_email, $extra_email, $author->user_email"; //If you want to send to site administrator, use $emails = get_option(\'admin_email\');
    $title                  =   wp_strip_all_tags(get_the_title($post->ID));
    $url                    =   get_permalink($post->ID);
    ////////////////////////////////////////////////////////////////////
    //  Email lay out
    ////////////////////////////////////////////////////////////////////   
       ob_start(); ?>
        <html>
                <head>
                <title></title>
            </head>
            <body>
            <p>
                Hi 
            </p>
            <p>
                <?php echo $author->user_login ;?> has created a new entry maintenance system.
            </p>
            <p>
                Some Content
            </p>
        </body>
    </html>
    <?php
    $message = ob_get_contents();
    ob_end_clean();
    if(get_post_type($post_id) === $post_type)
    wp_mail($emails, "New/Updated Post. Ref number $title", $message);
}?>
备注:

有趣的是,如果你更新一篇文章,一切都会很好。

add_action(\'post_updated\', \'send_emails_on_new_event\');

1 个回复
SO网友:Pim

您可以尝试添加global $post; 在您的代码之上。但这取决于调用函数的位置。

结束

相关推荐

如何检查WooCommerce订单号是否等于帖子ID?

我面临着一个挑战。我需要检查Woocommerce订单号是否等于Post ID。我知道90%的情况都是这样,但我需要防弹的方法来检查。请参见不正确且订单号和Post ID确实不同的示例:需要考虑的事项:我的插件可能安装在Woocommerce尚未创建订单的时候,但我在wordpress multisite上发现了这种情况,但我知道也有用于顺序订单号的插件。而且有很多插件,所以我不能只检查是否存在一个或两个插件</我需要知道这一点,因为我正在开发一个插件来检查客户手动支付的款项。因此,我知道付款将通过