Diferentes opções de formato de postagem por tipo de postagem personalizado?

Quero adicionar formatos de postagem para cada tipo de publicação. Por exemplo, eu tenho um tipo de publicação ‘Galeria’. Quero adicionar “imagens”, “galerias” e “videos” nesta publicação. Em postagens normais, eu quero usar outra lista de formatos de postagem.

Eu tento:

function postf() { global $post_ID; $postType = get_post_type( $post_ID ); if( $_GET['post_type'] || $postType == 'gallery-custompost' ) { add_theme_support( 'post-formats', array( 'image', 'gallery', 'video' ) ); add_post_type_support( 'gallery-custompost', 'post-formats' ); } } add_action('init', 'postf'); 

Quando eu adiciono uma nova postagem, funciona, mas quando eu tento editá-la, o formato da publicação não aparece.

Alguém tem alguma idéia de como devo fazê-lo?

Solutions Collecting From Web of "Diferentes opções de formato de postagem por tipo de postagem personalizado?"

Tente adicionar o suporte ao formato de postagem nos argumentos ao registrar seu tipo de publicação em vez de usar add_post_type_support , como este, por exemplo:

 $args = array( ... 'supports' => array('title', 'editor', 'author', 'post-formats') ); register_post_type('gallery-custompost', $args); 

Veja se tem sorte.

Você pode alterar a lista que aparece na checkbox de meta do formato de publicação, mas quando você salva a postagem, o valor enviado é verificado em relação aos formatos de postagem registrados e seu código provavelmente não foi executado.

Minha solução é registrar todos os formatos de postagem que você usará com seu tema e, em seguida, limitá-los com base no tipo de publicação, substituindo a meta checkbox padrão por uma de suas próprias. Isso limitará apenas as opções disponíveis na checkbox meta, não as restringirá quando você salvar uma postagem, mas provavelmente pode adicionar verificação adicional para impedir que os usuários aventureiros definam formatos de postagem “desautorizados”.

 // Register all post types that we will use add_action( 'after_setup_theme', 'wpse16136_after_setup_theme', 11 ); function wpse16136_after_setup_theme() { add_theme_support( 'post-formats', array( 'aside', 'gallery', 'video' ) ); } // Register our custom post type, and link the post formats to the post types // Yes, you can (ab)use add_post_type_support to save extra data like this add_action( 'init', 'wpse16136_init' ); function wpse16136_init() { register_post_type( 'wpse16136', array( 'public' => true, 'label' => 'WPSE 16136', 'supports' => array( 'title', 'editor' ), ) ); add_post_type_support( 'wpse16136', 'post-formats', array( 'gallery', 'video' ) ); add_post_type_support( 'post', 'post-formats', array( 'aside', 'gallery' ) ); } // Replace the standard meta box callback with our own add_action( 'add_meta_boxes', 'wpse16136_add_meta_boxes' ); function wpse16136_add_meta_boxes( $post_type ) { if ( ! get_post_type_object( $post_type ) ) { // It's a comment or a link, or something else return; } remove_meta_box( 'formatdiv', $post_type, 'side' ); add_meta_box( 'wpse16136_formatdiv', _x( 'Format', 'post format' ), 'wpse16136_post_format_meta_box', $post_type, 'side', 'core' ); } // This is almost a duplicate of the original meta box function wpse16136_post_format_meta_box( $post, $box ) { if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) ) : $post_formats = get_theme_support( 'post-formats' ); // This is our extra code // If the post type has registered post formats, use those instead if ( is_array( $GLOBALS['_wp_post_type_features'][$post->post_type]['post-formats'] ) ) { $post_formats = $GLOBALS['_wp_post_type_features'][$post->post_type]['post-formats']; } if ( is_array( $post_formats[0] ) ) : $post_format = get_post_format( $post->ID ); if ( !$post_format ) $post_format = '0'; $post_format_display = get_post_format_string( $post_format ); // Add in the current one if it isn't there yet, in case the current theme doesn't support it if ( $post_format && !in_array( $post_format, $post_formats[0] ) ) $post_formats[0][] = $post_format; ?> 
/> < ?php foreach ( $post_formats[0] as $format ) : ?>
/> < ?php endforeach; ?>
< ?php endif; endif; }

Post Formats são uma taxonomia personalizada, registrada para o post-tipo “Post”. Se você quiser usar a taxonomia “Post Format” para um post-tipo diferente , então você precisará registrá-lo para esse tipo de publicação, em vez de simplesmente ativar o suporte para o post-tipo “Post”.