未填充自定义帖子类型标题

时间:2014-05-05 作者:Cody

我正在尝试为函数显示标题。我给自己发了一封电子邮件,看看我能不能把它用在不同的标题上。目前,我唯一能让它工作的方法是通过get\\u the\\u标题中的硬编码数字。下面的例子很有效。

$tweetingthing = get_the_title(1067);   

    $to      = \'[email protected]\';
    $subject = \'Hi!\';
    $body    =  \'Hi,\' . chr(10) . chr(10) . \'Hi title= \' .  $tweetingthing . \' page id is   \' . $this_page_id;


    if( wp_mail($to, $subject, $body ) ) {
        echo(\'<p>Message successfully sent!</p>\');
    } else {
        echo(\'<p>Message delivery failed...</p>\');
    }
很明显,我想要的不仅仅是那个标题,我希望每个标题都能通过电子邮件发送。我试过这个:

global $post;
//$thePostID = $post->ID;
$wp_query->post;
$this_page_id = $post->ID;
echo $this_page_id ;
$tweetingthing = get_the_title($this_page_id);

    $to      = \'[email protected]\';
    $subject = \'Hi!\';
    $body    =  \'Hi,\' . chr(10) . chr(10) . \'Hi title= \' . $tweetingthing . \' Post id is   \' . $this_page_id;


    if( wp_mail($to, $subject, $body ) ) {
        echo(\'<p>Message successfully sent!</p>\');
    } else {
        echo(\'<p>Message delivery failed...</p>\');
    }
这为$tweetingthing和$This\\u page\\u id提供了null(我知道这是我试图获取的帖子id,我只是使用了示例中的变量giving,希望不会让任何人感到困惑)。

我也试过了

$tweetingthing = get_the_title($post_id);
还尝试了$tweet\\u post\\u id=the\\u id()$tweetingthing=获取\\u标题($tweet\\u post\\u id);

没有运气

$page_object = get_queried_object();
$tweetingthing = get_queried_object_id();
导致帖子标题为0

添加信息:

我正在使用状态转换操作启动函数。当它转到发布并匹配它执行的自定义帖子类型时。

我正在使用自定义帖子类型

如何获取自定义帖子标题?

完整源代码:

function intercept_all_status_changes( $new_status, $old_status, $post ) {
 if ( $new_status == \'publish\' && get_post_type( $post ) == \'tweet\' ) {
     // Post status changed
     twitter_run_when_published ();
 }
}  
add_action( \'transition_post_status\', \'intercept_all_status_changes\', 10, 3 );


function twitter_run_when_published () {
//
//email the stuffuff
//

 global $post;
 global $wp_query;
 //$thePostID = $post->ID;
 $wp_query->post;
 $this_page_id = $post->ID;
 echo $this_page_id ;

    $to      = \'[email protected]\';
    $subject = \'Hi!\';
    $body    =  \'Hi,\' . chr(10) . chr(10) . \'Hi title= \' . $tweetingthing . \' Post id is   \' . $this_page_id;


     if( wp_mail($to, $subject, $body ) ) {
         echo(\'<p>Message successfully sent!</p>\');
     } else {
         echo(\'<p>Message delivery failed...</p>\');
     }
}
所以在@nickyoung提到这很奇怪之后,我想如果状态发生变化,我会尝试发送一封电子邮件。它给我发了4条信息。

第一:标题不存在(职位状态不存在)第二:标题不存在(职位状态不存在)第三:标题存在(职位状态为草稿)第四:没有标题和职位状态不存在

编辑:刚刚整理了一些jibberish的句子

edit2:添加了完整的源代码以查看是否有任何帮助

edit3:添加了有关post状态转换的额外信息

2 个回复
SO网友:Dave Hilditch

如果您执行以下操作:

$custompost = get_post(get_the_ID());
echo $custompost->post_title;
你会发现它是有效的。很明显,Wordpress核心中的某个地方有一个bug——对于自定义的帖子类型,这也发生在我身上。不确定是什么触发了它,但以上是一个解决方法。

SO网友:tfrommen

我觉得你这样做太复杂了。你已经有了$post, 所以只需将其ID传递给函数即可。

像这样尝试:

function intercept_all_status_changes( $new_status, $old_status, $post ) {

    if (
        $new_status === \'publish\'
        && get_post_type( $post ) === \'tweet\'
    ) {
        // Post status changed
        twitter_run_when_published( $post->ID );
    }
}
add_action( \'transition_post_status\', \'intercept_all_status_changes\', 10, 3 );

function twitter_run_when_published( $post_id ) {

    $title = get_the_title( $post_id )

    $to = \'[email protected]\';
    $subject = \'Hi!\';
    $body = \'Title: \' . $title . \', ID: \' . $post_id;

    if ( wp_mail( $to, $subject, $body ) ) {
        echo \'<p>Message successfully sent!</p>\';
    } else {
        echo \'<p>Message delivery failed...</p>\';
    }
}

结束

相关推荐