自定义帖子上的多个内容部分

时间:2014-05-07 作者:callumacrae

我有一个称为案例研究的自定义帖子类型,然后我将其拉出并显示在一个页面上。每个案例研究都有几个标准部分,我希望每个部分都有一个单独的编辑器。

对于包含多个部分的页面,我一直在使用MultiEdit, 这很好用。然而,它只在页面上工作,所以它不是一个选项。

我该如何为我的自定义帖子类型执行此操作?还是我处理问题的方法不对?

3 个回复
最合适的回答,由SO网友:thedigitalmonk 整理而成

您可以使用高级自定义字段来实现这一点。

看看吧here

您可以添加具有完整编辑器功能的自定义字段和特定字段,如图像、文本、数字、链接等。您还可以通过创建字段组并将“仅显示如果”设置为自定义帖子类型,仅为自定义帖子类型显示这些字段。

这是一个非常通用和方便的插件,我在所有项目中都使用它。使管理和更新自定义字段更加容易,几乎无需编码。

SO网友:birgire

对自定义帖子类型的多编辑支持:

有一种方法可以将多个内容节添加到自定义帖子类型编辑屏幕:

MultiEdit support for custom post types

演示插件:

您可以使用以下演示插件作为页面的扩展。使用MultiEdit插件,添加对自定义帖子类型的支持:

<?php
/**
 * Plugin Name: MultiEdit support for custom post type
 * Description: You must have the Page.ly MultiEdit plugin installed.
 * Plugin URI:  http://wordpress.stackexchange.com/a/143688/26350
 * Author:      birgire
 * Version:     0.0.1 
 */

add_action( \'load-post.php\', \'wpse_143674_init\' );

function wpse_143674_init()
{
    //--------------------------------
    // EDIT this setup to your needs:
    //
    $args = array( 
        \'post\' => array( \'Bottom\', \'Center\', \'Top\' ), 
        \'news\' => array( \'Left\', \'Right\' ), 
    );

    $m = new WPSE_Multi_Edit_CPT( $args );
    $m->init();
}

/**
 * Class WPSE_Multi_Edit_CPT
 */
class WPSE_Multi_Edit_CPT
{ 
    protected $args      = array();
    protected $screen_id = \'\';

    public function __construct( $args = array() )
    {
        $this->args = $args;
    }

    public function init()
    {
        $this->screen_id = get_current_screen()->id;

        if( function_exists( \'multieditAdminHeader\' )                        // check if Multi Edit plugin is installed
            && 0 < count( $this->args )                                      // check if input arguments exists
            && \'page\' !== $this->screen_id                                   // dont\' want \'page\' post type
            && in_array( $this->screen_id, array_keys( $this->args ), TRUE )  // match input arguments
        )
            add_action ( \'admin_footer\', array( $this, \'do_multi_meta\'), 1 );    
    }

    public function do_multi_meta() 
    {
        global $post;

        // Multi content sections for the current post type:
        $multi = ( isset( $this->args[$this->screen_id] ) ) ? $this->args[$this->screen_id] : array();

        // Load scripts:
        multieditAdminHeader();

        // We have multiedit zones, load js and css load
        add_action ( \'edit_page_form\',     \'multieditAdminEditor\', 1 );
        add_action ( \'edit_form_advanced\', \'multieditAdminEditor\', 1 );

        // Current post meta:
        $meta = has_meta( $post->ID );

        // What tabs to display:
        $present = array();
        foreach( $meta as $k => $v )
        {
            if( in_array( $region = str_ireplace( \'multiedit_\',\'\', $v[\'meta_key\'] ), $multi, TRUE ) ):
                $present[$region] =  TRUE;
            else:
                unset( $meta[$k] );
            endif;          
        }

        //Draw HTML:
        drawMultieditHTML( $meta, $present );

        // If custom field is not declared yet, create one with update_post_meta 
        foreach( $multi as $region )
        {
            if( ! isset( $present[$region] ) ) 
                update_post_meta( $post->ID, \'multiedit_\' . $region, \'\' );
        }       
    }

} // end class
将上述代码添加到文件中/wp-content/plugins/multiedit-cpt/multiedit-cpt.php 并激活它。

您只需根据需要编辑设置:

    $args = array( 
        \'post\' => array( \'Bottom\', \'Center\', \'Top\' ), 
        \'news\' => array( \'Left\', \'Right\' ), 
    );
希望这有帮助。

SO网友:woony

这取决于你的编码水平。

如果使用插件创建自定义帖子类型,则必须查找使用wp\\U编辑器或其他富文本编辑器(如TinyMCE)的插件。

如果您自己创建自定义帖子类型,则可以使用

  • wp_editor 而不是文本区域。

    <?php wp_editor( $content, $editor_id, $settings = array() ); ?> 
    
    或附加TinyMCE 或者将另一个富格文本编辑器添加到您的文本区域。

    <script type="text/javascript src="<your installation path>/tinymce/tinymce.min.js"/>
    <script type="text/javascript">
    tinymce.init({
        selector: "textarea"
     });
    </script>
    

结束

相关推荐