Проверка формата сообщения во время xmlrpc_publish_post

WordPress, по-видимому, сохраняет информацию о формате сообщения вне объекта $post . Во время publish_post это не проблема (обычно), потому что вы можете проверять форматы через get_post_format( $post->ID ) вне цикла.

Это не работает во время xmlrpc_publish_post или app_publish_post . Люди должны работать над этим, чтобы получить функции плагина / темы, работающие на мобильных / настольных приложениях.

Мой конкретный код ниже, если это ошибка на моем конце.

 function posse_twitter( $post_ID ) { error_log('Executing posse_twitter()'); global $post; // check post format if necessary if ( get_post_format( $post->ID ) != 'status' ) return; error_log('posse_twitter() made it past format check'); $post_id = $post->ID; $shortlink = wp_get_shortlink(); $tweet_content = $post->post_content.' '.$shortlink; // ...run code once if ( !get_post_meta( $post_id, 'tweeted', $single = true ) ) { error_log('posse_twitter() not tweeted before'); // require the relevant libraries require get_template_directory() .'/inc/posse/libraries/tmhOAuth/tmhOAuth.php'; require get_template_directory() .'/inc/posse/libraries/tmhOAuth/tmhUtilities.php'; $tmhOAuth = new tmhOAuth(array( 'consumer_key' => 'XXXXX', 'consumer_secret' => 'XXXXX', 'user_token' => 'XXXXX', 'user_secret' => 'XXXXX', )); $code = $tmhOAuth->request('POST', $tmhOAuth->url('1/statuses/update'), array( 'status' => $tweet_content )); error_log('posse_twitter() made it past tmhOAuth, should be on Twitter now'); update_post_meta( $post_id, 'tweeted', true ); } } add_action( 'xmlrpc_publish_post', 'posse_twitter' ); add_action( 'app_publish_post', 'posse_twitter' ); add_action( 'publish_post', 'posse_twitter' ); 

error_log() s, поскольку я отлаживал это. Он стреляет, когда xmlrpc_publish_post и app_publish_post попадают, но он не проходит мимо проверки формата.

Обновление: это также не работает, даже если я сначала сохраню пост в виде черновика (через XML-RPC).

Solutions Collecting From Web of "Проверка формата сообщения во время xmlrpc_publish_post"

Это связано с переменным несоответствием. Ваша функция принимает $post_ID , но на самом деле вы ее не используете. Вместо этого вы пытаетесь ссылаться на глобальный объект $post и выполняете проверку почтового формата с помощью $post->ID . С запросом XML-RPC это не сработает.

Перепишите свою функцию, чтобы использовать get_post() для извлечения объекта post из идентификатора прошедшего:

 function posse_twitter( $post_ID ) { error_log('Executing posse_twitter()'); $post = get_post( $post_ID ); // check post format if necessary if ( get_post_format( $post->ID ) != 'status' ) return; error_log('posse_twitter() made it past format check'); ... }