web-dev-qa-db-ja.com

この投稿をカスタム投稿タイプで保存

私は思っています、投稿が投稿ではなくカスタム投稿タイプに保存されるように、 "This This"ブックマークレットを修正する方法はありますか。見てみると、それを可能にするようなアクションがあるようには見えませんが、私は間違っているかもしれません。

多くの変更があったことを私は知っているので、私はそれが行われていた方法はまだ適切ではないと思っています。

5
Jason Hoffmann

Press This 

これは、Press-This投稿タイプを変更するための簡単なプラグインです。

<?php
/**
 * Plugin Name: Press-This Custom Post Type
 * Plugin URI:  http://wordpress.stackexchange.com/a/192065/26350
 */
add_filter( 'wp_insert_post_data', function( $data )
{
    $old_cpt = 'post';
    $new_cpt = 'page';  // <-- Edit this cpt to your needs!

    $obj = get_post_type_object( $new_cpt );

    // Change the post type
    if( 
           doing_action( 'wp_ajax_press-this-save-post' ) // Check the context
        && isset( $data['post_type'] ) 
        && $old_cpt === $data['post_type']                // Check the old post type
        && isset( $obj->cap->create_posts ) 
        && current_user_can( $obj->cap->create_posts )    // Check for capability
    )
        $data['post_type'] = $new_cpt;

    return $data;

}, PHP_INT_MAX );

ニーズに合わせて投稿タイプを変更する必要がある場所。

ここでは、press-this-save-postajaxコンテキストにいることを確認します。

doing_action( 'wp_ajax_press-this-save-post' ) 

また、現在のユーザーに新しいカスタム投稿を作成する権限があることを確認します。

更新

WordPress 4.5以降、 press_this_save_post フィルターは投稿データを修正するために利用可能です。

これを使用して投稿タイプを変更し、カスタム分類用語に割り当てる方法の例を次に示します。

/**
 * Plugin Name: Press-This Custom Post Type And Taxonomy Term
 * Plugin URI:  http://wordpress.stackexchange.com/a/192065/26350
 */
add_filter( 'press_this_save_post', function( $data )
{
    //---------------------------------------------------------------
    // Edit to your needs:
    //
    $new_cpt    = 'movie';              // new post type
    $taxonomy   = 'actor';              // existing taxonomy
    $term       = 'john-wayne';         // existing term
    //---------------------------------------------------------------

    $post_object = get_post_type_object( $new_cpt );
    $tax_object  = get_taxonomy( $taxonomy );

    // Change the post type if current user can
    if( 
           isset( $post_object->cap->create_posts ) 
        && current_user_can( $post_object->cap->create_posts ) 
    ) 
        $data['post_type']  = $new_cpt;

    // Change taxonomy + term if current user can    
    if ( 
           isset( $tax_object->cap->assign_terms ) 
        && current_user_can( $tax_object->cap->assign_terms ) 
    ) 
        $data['tax_input'][$taxonomy]   = $term;

    return $data;

}, 999 );
6
birgire