在管理中显示所选模板的图像,以帮助用户使用复杂模板

时间:2012-08-16 作者:JohnDevelops

Edit:

看来我没有很好地解释自己。。。

我只是想根据选择的模板向管理区域的页面属性区域添加一个图像,下面是我希望实现的一个简单模型:Dropbox Image Link.

<小时>

Original:

我希望增加我的客户在编辑Wordpress管理区域内的页面时,能够看到当前选定模板的轮廓或线框(图像)。

一个巨大的好处是,客户能够通过查看并随后单击可用模板/内容布局的图像来实际选择模板。

然而,我当然会把情况复杂化。由于我将Wordpress更多地用作一个内容管理系统,其中包含一些非常独特和/或复杂的内容布局(例如具有多个列和内容区域的网格重布局),因此我只想向用户提供尽可能多的字段指示,而无需为每个内容块、列或网格位置写入长/复杂的名称。

如果有必要的话,我使用的是加载项的高级自定义字段(包括所有可购买的额外字段,如repeater字段)和多个内容块。

模板中定义的区域不一定总是用于相同的内容,因此简单地将每个字段/块命名为“满足团队简介的区域”,“将简介段落放在此处”很快就会变得不相关且更加混乱。

我希望我已经提供了足够的信息。

1 个回复
最合适的回答,由SO网友:Brian Fegter 整理而成

预备任务在主题中创建一个目录,以包含布局拇指

方法1:仅JavaScript

Load the following only for post.php and post-new.php

add_action(\'admin_head-post.php\', \'template_thumbs\');
add_action(\'admin_head-post-new.php\', \'template_thumbs\');

function template_thumbs(){
    global $post;
    if($post->post_type != \'page\')
        return;

    $js = "
        <script type=\'text/javascript\'>
            jQuery(document).ready(function($){
                //Define the page template select drop-down
                var _template = $(\'#page-template\');

                #Get the thumb on page load
                if(_template.val())
                    get_template_thumb(_template.val());


                //Sniff template changes
                _template.change(function(){
                    //Get template file name
                    var _file = $(this).val();
                    if(_file)
                        get_template_thumb(_file);
                });
            });

            function get_template_thumb(file){

                //Define the path to your thumbs directory
                var _thumb_path = \'/wp-content/themes/your-theme/img/layouts/\';

                //Format thumb filename
                file.replace(\'tpl-\', \'\');
                file.replace(\'.php\', \'\');
                file = _thumb_path + file + \'.jpg\';

                //Remove previous thumbnail
                $(\'.template-thumb\').remove();

                //Insert thumbnail before the select box
                $(this).before(\'<img class=\\\'template-thumb\\\' src=\\\' + file + \'\\\' alt=\\\'Layout\\\'>\');

            }
        </script>
    ";
    echo $js;
}
方法2:AJAX+PHP如果这种方法不适用,我会启动一个XHR并检索缩略图。

add_action(\'admin_head-post.php\', \'template_thumbs_script\');
add_action(\'admin_head-post-new.php\', \'template_thumbs_script\');

function template_thumbs_script(){
    global $post;
    if($post->post_type != \'page\')
        return;

    $js = "
        <script type=\'text/javascript\'>
            jQuery(document).ready(function($){

                //Sniff template changes
                $(\'#page-template\').change(function(){

                    //Set $_POST data
                    var data = {
                        action: \'get_template_thumb\',
                        template: $(this).val()
                    };

                    //Send XHR
                    $.post(ajaxurl, data, function(response) {
                        if(response){

                            //remove previous thumb
                            $(\'.template-thumb\').remove();

                            //Insert thumb before select drop-down
                            $(\'#page-template\').before(response);
                        }
                    });
                });
            });
        </script>
    ";
    echo $js;
}


add_action(\'wp_ajax_get_template_thumb\', \'get_template_thumb\');
function get_template_thumb(){
    #Verify Nonce

    #Get template name
    $template = esc_attr($_POST[\'template\']);

    #Format image name
    $img_file = str_replace(\'tpl-\', \'\', $template);
    $img_file = str_replace(\'.php\', \'\', $template);

    #Assuming this is in functions.php theme root. If not, make absolute path
    $thumb_path = \'img/layouts/\';

    #Check if file exists first
    if(file_exists($thumb_path.$img_file.\'.jpg\'))

        #Return an image tag
        echo "<img class=\'template-thumb\' src=\'$img_file.jpg\' alt=\'Template Layout\'>";

    exit;
}

结束

相关推荐

Custom post types templates

我已经注册了一个名为“Services”的自定义帖子类型,但当我给这篇帖子提供模板“single Services.php”时,它不接受这个,而是选择了“homepage.php”模板,你能告诉我这个问题吗?它也没有使用“archive services.php”模板,而是使用blog模板(index.php)使现代化代码如下:add_action(\'init\', \'services_register\'); function services_register() { $