ちょっとしたAPIを使用してショートリンクを作成するためのこのプラグインがありますが、問題があります!
function yoast_bitly_shortlink($url, $id, $context, $allow_slugs) {
if ( ( is_singular() && !is_preview() ) || $context == 'post' ) {
$short = get_post_meta($id, '_yoast_bitlylink', true);
if ( !$short || $short == '' ) {
if ( !defined('BITLY_USERNAME') || !defined('BITLY_APIKEY') ) {
$short = 'http://yoast.com/wordpress/bitly-shortlinks/configure-bitly/';
} else {
$url = get_permalink( $id );
$req = 'http://api.bit.ly/v3/shorten?format=txt&longUrl='.$url.'&login='.BITLY_USERNAME.'&apiKey='.BITLY_APIKEY;
if ( defined('BITLY_JMP') && BITLY_JMP )
$req .= '&domain=j.mp';
$resp = wp_remote_get( $req );
if ( !is_wp_error( $resp ) && is_array( $resp['response'] ) && 200 == $resp['response']['code'] ) {
$short = trim( $resp['body'] );
update_post_meta( $id, '_yoast_bitlylink', $short);
}
}
}
return $short;
}
return false;
}
add_filter( 'pre_get_shortlink', 'yoast_bitly_shortlink', 99, 4 );
function yoast_bitly_admin_bar_menu() {
global $wp_admin_bar, $post;
if ( !isset($post->ID) )
return;
$short = wp_get_shortlink( $post->ID, 'query' );
if ( is_singular() && !is_preview() ) {
if ( $short != 'http://yoast.com/wordpress/bitly-shortlinks/configure-bitly/' )
$shortstats = $short.'+';
// Remove the old shortlink menu, because it has some weird JS issues with admin bar when giving it submenu's.
$wp_admin_bar->remove_menu('get-shortlink');
$wp_admin_bar->add_menu( array( 'id' => 'shortlink', 'title' => __( 'Bit.ly' ), 'href' => 'javascript:Prompt('Short Link:', ''.$short.''); return false;' ) );
$wp_admin_bar->add_menu( array( 'parent' => 'shortlink', 'id' => 'yoast_bitly-link', 'title' => __( 'Bit.ly Link' ), 'href' => 'javascript:Prompt('Short Link:', ''.$short.''); return false;' ) );
$wp_admin_bar->add_menu( array( 'parent' => 'shortlink', 'id' => 'yoast_bitly-twitterlink', 'title' => __( 'Share on Twitter' ), 'href' => 'http://Twitter.com/?status='.str_replace('+','%20', urlencode( $post->post_title.' - '.$short) ) ) );
$wp_admin_bar->add_menu( array( 'parent' => 'shortlink', 'id' => 'yoast_bitly-stats', 'title' => __( 'Bit.ly Stats' ), 'href' => $shortstats, 'meta' => array('target' => '_blank') ) );
}
}
add_action( 'admin_bar_menu', 'yoast_bitly_admin_bar_menu', 95 );
すべての投稿の2つのビットリンクを作成します。1つは/?p=12345
で、もう1つは/post-name
です。すべての投稿をスケジュールするので、?p=12345
は自動保存、プレビューで作成されますそして、スケジュールされ、/post-name
が作成され、投稿が公開されると...残念ながら、?p=12345
はデフォルトの短いURLとして設定されます。 ?p=12345
= bit.ly/sdfssdfd
で、もう1つは無視されます。
/post-name
のリンクを1つだけ作成し、他のリンクではなくデフォルトとして設定するには、どうすればよいですか?!
私はこれを試しました:
$mypost = get_page( $id );
if ( !in_array($mypost->post_status, array('future', 'publish')) ) {
return "Post must be published to get a shortlink";
}
しかし、見返りに記載されているように、ショートリンクを取得するには投稿を公開する必要があります(リンクを1つ作成しますが、少しウェブサイトに/?p=12345
を作成しますが、WordPressには表示されません)、公開する代わりに、スケジュールされた後に作成されるURL.
だから私は変更しようとしました
$mypost = get_page( $id );
if ( !in_array($mypost->post_status, array('schedule', 'future')) ) {
return "Post must be published to get a shortlink";
}
しかし、想像できるように、それは機能していません...
それをどのように修正できるか考えていますか?
ありがとう!
これが助けになるかどうかはわかりませんが、いくつかのアクションが複数回実行されることを知るのに役立つかもしれません。たとえば、save_postは実際には特定の保存に対して3回または4回起動します。一つは改訂用です。新しい記事の一つ。等。
あなたの場合、あなたが似たようなことを経験しているのかもしれません。それが何であれ、プリフォームを起動することでpost_nameが割り当てられ、それからまた後に割り当てられます。多分?