我想在不使用任何插件的情况下在Facebook上自动发布我的WP博客的所有文章。
我写了一些工作代码来做到这一点,没关系......但是我还需要在发布新文章时调用此代码(不是用于修订或自动保存)。
这是我需要查看的function.php文件的一部分:
add_action( 'save_post', 'koolmind_facebook_post_article',3 );
function koolmind_facebook_post_article( $post_id ) {
/* configuration of facebook params */
....
....
/* end config */
if ( !wp_is_post_revision( $post_id ) && !wp_is_post_autosave( $post_id ) ) {
/* retrieve some data to publish */
/* invoke my code to publish on facebook */
}
}
我点击“添加新文章”后立即调用我的代码,并将空草稿发送到我的Facebook页面。 另外,只要我在文章正文中插入一个字符,就会触发自动保存并再次向Facebook发送一个新帖子(几乎为空)。
我只是想阻止这种自动发布,只有当我按下PUBLISH按钮时才将我的数据发送到Facebook。
这可能吗?
更新
最后我发现了问题。我的fb代码中有一个错误。 现在的问题是在更新帖子时避免多次出版。
现在是代码:
add_action('pending_to_publish', 'koolmind_facebook_post_article');
add_action('draft_to_publish', 'koolmind_facebook_post_article');
add_action('new_to_publish', 'koolmind_facebook_post_article');
function koolmind_facebook_post_article( $post_id ) {
require_once 'facebook/facebook.php';
/* some code here */
//verify post is not a revision
if ( !wp_is_post_revision( $post_id ) ) {
$post_title = get_the_title( $post_id );
$post_url = get_permalink( $post_id );
$post_excerpt = get_the_excerpt();
$post_image = 'http://.../default.jpg'; //default image
if( $thumb_id = get_post_thumbnail_id( $post_id ) ){
$image_attributes = wp_get_attachment_image_src( $thumb_id );
$post_image = $image_attributes[0];
}
/* some code here */
}
}
让我解释一下这个问题:
如果我使用这3个钩子我没有问题,但代码是在我的特色图像存储到数据库之前执行的,所以$ post_image总是等于默认图像。
如果我使用publish_post钩子,那么特色图像设置正确(可能是因为在保存所有数据后调用此钩子),但如果我更新帖子,我无法避免数据发送到Facebook(wp_is_post_revision似乎不会被解雇)。
希望你有个好主意......现在代码几乎可以了! :)
答案 0 :(得分:1)
'save_post'挂钩'Runs after the data is saved to the database'。这意味着您可以进行此验证:
//WP hook
//the last parameter 2 means you pass 2 variables to the callback:
//the ID and the post WP object
add_action( 'save_post', 'koolmind_facebook_post_article',3,2 );
//Callback
function koolmind_facebook_post_article( $post_id, $post ) {
// Validation:
//If current WP user has no permissions to edit posts: exit function
if( !current_user_can('edit_post', $post_id) ) return;
//If is doing auto-save: exit function
if( defined('DOING_AUTOSAVE') AND DOING_AUTOSAVE ) return;
//If is doing auto-save via AJAX: exit function
if( defined( 'DOING_AJAX' ) && DOING_AJAX ) return;
//If is a revision or an autosave version or anything else: exit function
if( $post->post_status != 'publish') return;
/* configuration of facebook params */
/* invoke my code to publish on facebook */
}
它对我有用。
答案 1 :(得分:0)
尝试使用:
add_action('publish_post', 'koolmind_facebook_post_article');