在主页上隐藏\\显示公告(只是div)的简单方法?

时间:2019-08-23 作者:DDulla

在wordpress中,在用作主页的特定页面中,我有一段HTML用于发布公告。我想让某人能够轻松地从仪表板自定义此部分,以及打开/关闭它。

要求:

只有这1条公告才会存在(无需显示多条)

  • 在H3部分内,用户可以编辑文本,允许用户更改“了解更多”按钮文本,允许用户指定按钮URL初始方法:

    插件注册一个post\\u类型的“公告”添加一个元框以包含开/关开关、url和按钮文本使用帖子内容作为公告中的数据现在,问题开始了:

    我正在做的事情是否会影响绩效

    My plugin code is below, or take a look at the complete code

    Complete Plugin Code (https://pastebin.com/N5BgUSqa)

    <section class="d-none mt-n7 p-0 position-relative mb-5" style="z-index:999;">
        <div class="container">
            <div class="d-block d-md-flex bg-dark-grad p-4 p-sm-5 all-text-white border-radius-3">
                <div class="align-self-center text-center text-md-left">
                    <h3 class="mb-0">Placeholder For Special Offer or News (Shown When Activated)</h3>
                </div>
                <div class="mt-3 mt-md-0 text-center text-md-right ml-md-auto align-self-center">
                    <button class="btn btn-white mb-0">Learn more!</button>
                </div>
            </div>
        </div>
    </section>
    
    我的插件自定义公告的相关部分。php

    注册自定义帖子类型:

    $args = array(
        \'labels\' => $labels,
        \'singular_label\' => __(\'Announcement\', \'custom-announcements\'),
        \'public\' => true,
        \'capability_type\' => \'post\',
        \'rewrite\' => false,
        \'supports\' => array(\'title\', \'editor\'),
    );
    register_post_type(\'announcements\', $args);
    
    配置元数据库:

    add_action( \'add_meta_boxes\', \'ca_add_metabox\' );
    
    function ca_metabox( $post ) {
        $values = get_post_custom( $post->ID );
        $banner_enabled = isset( $values[\'ca_banner_enabled\'] ) ? esc_attr( $values[\'ca_banner_enabled\'][0] ) : \'\';
        $button_url = isset( $values[\'ca_url\'] ) ? esc_attr( $values[\'ca_url\'][0] ) : \'\';
        $button_title = isset( $values[\'ca_button_title\'] ) ? esc_attr( $values[\'ca_button_title\'][0] ) : \'\';
        wp_nonce_field( \'ca_metabox_nonce\', \'metabox_nonce\' );
    
    连接短代码以显示公告的功能:

     function ca_announce(){
      global $post;
      $html = \'\';
    
      $ca_a = new WP_Query( array(
           \'post_type\' => \'announcements\',
           \'posts_per_page\' => 1,
           \'meta_query\' =>  array(
                             array(
                               \'key\' => \'ca_banner_enabled\',
                               \'value\' => \'yes\'
                              )
                            )
      ));
    
      if( $ca_a->have_posts() ) : while( $ca_a->have_posts() ) : $ca_a->the_post();
            $html .= \'<section class="mt-n7 p-0 position-relative mb-5" style="z-index:999;">\';
             $html .= \'<div class="container">\';
             $html .= \'<div class="d-block d-md-flex bg-dark-grad p-4 p-sm-5 all-text-white border-radius-3">\';
             $html .= \'<div class="align-self-center text-center text-md-left">\';
             $html .= \'<h3 class="mb-0">\' . get_the_content()  . \'</h3>\';
             $html .= \'</div><div class="mt-3 mt-md-0 text-center text-md-right ml-md-auto align-self-center"><button class="btn btn-white mb-0">\';
             $html .= get_post_meta($ca_a->ID, \'ca_button_title\', true );
             $html .= \'</button></div></div></div></section>\';
             $html .= \'\';
             $html .= \'\';
      endwhile; endif;
      return $html;
     }
    
     add_shortcode( \'ca\', \'ca_announce\' );
    

  • 1 个回复
    SO网友:Mike Baxter

    最快最简单的方法是Advanced Custom Fields Pro (ACF) 为您的公告创建自定义元数据库。他们有一个resources page 有很多例子供你选择,还有更多的食谱可从社区贡献中获得。Tuts Plus有一个很棒的教程getting started with ACF.

    在我的例子中,我还创建了一个“启用/禁用”按钮,在我不需要的时候关闭ACF字段。因此,在我需要谷歌地图的页面上,我为谷歌地图启用了ACF字段,并将我的地图坐标输入到字段列表中。

    ACF有一个“生成器”,可以帮助您创建所需的所有字段和条件。这包括能够指定页面/帖子/CPT来显示您的内容,以及允许修改内容的用户/角色。还有一个导出器,它提供了将功能添加到主题中所需的所有代码。

    我与ACF没有任何关联关系,也没有与ACF和/或其关联公司相关的任何公司、亲戚或朋友。

    我只使用ACF为数十个网站构建了大量定制。它为我节省了大量的时间和头痛。

    相关推荐

    Testing Plugins for Multisite

    我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。