WordPress更改帖子模板,但不是下拉列表,而是图像选择

时间:2017-05-23 作者:The WP Intermediate

我浏览了WordPress抄本,发现了类似的东西→

function is_page_template( $template = \'\' ) {
    $page_template = get_page_template_slug( get_queried_object_id() );


if ( empty( $template ) )
    return (bool) $page_template;

if ( $template == $page_template )
    return true;

if ( is_array( $template ) ) {
    if ( ( in_array( \'default\', $template, true ) && ! $page_template )
        || in_array( $page_template, $template, true )
    ) {
        return true;
    }
}

return ( \'default\' === $template && ! $page_template );
}
我想如果我们在函数中粘贴上面的内容。php然后我们将有帖子模板选项,对吗?

但是如果我们想用这样的图片来选择帖子类型的模板呢→ enter image description here 这是来自genesis post page后端的图像。

WordPress是否提供此类安排?我是一个初学者,所以不明白如何才能做到这一点?

虽然逻辑对我来说很清楚→

Step 1: 在后端创建Meta,该Meta将具有如下选择选项→ enter image description hereenter image description hereenter image description here

**第2步**→我们必须以某种方式连接此元中选择的选项以打印类。例如,假设图像是按顺序排列的,如果选择了第二个(第二个图像),则返回“sidebar-wrap2”,这是一个类。

目前,这是HTML→

<aside class="main-sidebar col">
    <?php dynamic_sidebar( \'sidebar1\' ); ?>
</aside>





<aside class="main-sidebar col <?php If certain condition true {echo "sidebar-wrap2"} ?> ">
    <?php dynamic_sidebar( \'sidebar1\' ); ?>
</aside>
虽然我不知道这个特定条件是什么,以及如何写。

我是一名编码新手,如果我不能正确地提出我的问题,请原谅我。谢谢

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

这是您试图实现的深入功能,但我在下面列出了一些信息,这些信息将帮助您添加此功能。

使用您的帖子类型选项构建自定义meta\\u框create a meta box 这是一个很好的起点,您可以在谷歌上搜索更多其他示例创建图像单选按钮Radio button images

  • 您需要在帖子显示区域中拉取此选项,并检查保存了什么选项以显示所需的正确布局。您需要包括一些代码,如下面所示,如果是单发,您可以在其中返回帖子。php等等,但如果您不是主题作者,我会将此页面作为子主题添加,以供将来更新。

    // Get our option for post ID from the options meta box change "$field_name" to your option name you use in the meta box
    $post_id = get_post_meta(get_the_ID(),$field_name,true);
    
    // Check our option and change the display to what option is set
    
    if($post_id == \'sidebar1\'){
      dynamic_sidebar( \'sidebar1\' );
    }
    if($post_id == \'sidebar2\'){
      dynamic_sidebar( \'sidebar2\' );
    }
    else{
     // Added for when an option is not set
    }
    

    enter image description here

    更新2:

    这是一个插件代码,它将创建元框,添加图像单选按钮集,并保存数据。如果有一个选项完全工作,它还将在所选选项上设置红色边框。您还需要执行以下操作,以便在实时站点上使用它。

    将代码保存在php文件中,并添加到一个文件夹中,以便上载到网站。编辑插件详细信息和默认代码,如custom\\u meta\\u box\\u markup,将css添加到一个单独的文件中,并使用image文件夹,然后链接到您自己的图像。代码:

    <?php
        /**
        * Plugin Name: Post options panel
        * Plugin URI: url to plugin
        * Description: Adds posts options layout
        * Version: 1.0
        * Author: My name
        * Author URI: My url
        * License: A "Slug" license name e.g. GPL12
        */
    
        // Dont call me direct!
        if ( ! defined( \'ABSPATH\' ) ) exit;
    
    
    
    
        // Create content
        function custom_meta_box_markup($object)
        {
            wp_nonce_field(basename(__FILE__), "meta-box-nonce");
    
            ?>
    
        <style>
        label > input{ /* HIDE RADIO */
          visibility: hidden; /* Makes input not-clickable */
          position: absolute; /* Remove input from document flow */
        }
        label > input + img{ /* IMAGE STYLES */
          cursor:pointer;
          border:2px solid transparent;
        }
        label > input:checked + img{ /* (RADIO CHECKED) IMAGE STYLES */
          border:2px solid #f00;
        }
        </style>
    
    
    
                <div>
    
                    <h4>Radio options</h4>
                    <?php
                        // U need to use this to set the checked="checked"
                        $checkbox_value = get_post_meta($object->ID, "meta-box-radio", true);
                    ?>
                               <label>
                               <input type="radio" name="meta-box-radio" value="sidebar1"<?php if($checkbox_value == \'sidebar1\'){echo \'checked =\\"checked\\"\';} ?> /><img src="http://3.bp.blogspot.com/-J7zDitJOPZs/VhysC9I9n7I/AAAAAAAAERk/fAMHsC2fiGI/s1600/grey_new_seo-18-512.png" style="height: 20px; width: 20px;"></label>
                               <label>
                               <input type="radio" name="meta-box-radio" value="sidebar2" <?php if($checkbox_value == \'sidebar2\'){echo \'checked =\\"checked\\"\';} ?>/><img src="http://3.bp.blogspot.com/-J7zDitJOPZs/VhysC9I9n7I/AAAAAAAAERk/fAMHsC2fiGI/s1600/grey_new_seo-18-512.png" style="height: 20px; width: 20px;"></label>
                               <label>
                               <input type="radio" name="meta-box-radio" value="sidebar3" <?php if($checkbox_value == \'sidebar3\'){echo \'checked =\\"checked\\"\';} ?>/><img src="http://3.bp.blogspot.com/-J7zDitJOPZs/VhysC9I9n7I/AAAAAAAAERk/fAMHsC2fiGI/s1600/grey_new_seo-18-512.png" style="height: 20px; width: 20px;"></label>
    
                </div>
        <?
        }
    
    
        // Saving data
        function save_custom_meta_box($post_id, $post, $update)
        {
            if (!isset($_POST["meta-box-nonce"]) || !wp_verify_nonce($_POST["meta-box-nonce"], basename(__FILE__)))
                return $post_id;
    
            if(!current_user_can("edit_post", $post_id))
                return $post_id;
    
            if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE)
                return $post_id;
    
            $slug = "post";
            if($slug != $post->post_type)
                return $post_id;
    
    
    
            if(isset($_POST["meta-box-radio"]))
            {
                $meta_box_value = $_POST["meta-box-radio"];
            }
            update_post_meta($post_id, "meta-box-radio", $meta_box_value);
    
        }
    
        add_action("save_post", "save_custom_meta_box", 10, 3);
    
    
        function add_custom_meta_box()
        {
            add_meta_box("demo-meta-box", "Custom Meta Box", "custom_meta_box_markup", "post", "normal", "high", null);
        }
    
        add_action("add_meta_boxes", "add_custom_meta_box");
    
    以下是可用于保存选项的代码

    // Get our option for post ID from the options meta box change "$field_name" to your option name you use in the meta box
    $post_option = get_post_meta(get_the_ID(),"meta-box-radio",true);
    
    // Check our option and change the display to what option is set
    
        if($post_option == \'sidebar1\'){
          dynamic_sidebar( \'sidebar1\' );
        }
        if($post_option == \'sidebar2\'){
          dynamic_sidebar( \'sidebar2\' );
        }
        else{
         // Added for when an option is not set
        }
    

  • 结束

    相关推荐

    Functions.php中的入队样式

    这对我没用functions.php: if( is_page_template( \'template-flat.php\' ) ) { function flatsome_scripts() { wp_enqueue_style( \'flatsome-style\', get_template_directory_uri() .\'/flatash/css/foundation.css\', array(), \'2.1\', \'all\'); }