如果所有内容都由主题的本机插件处理,我如何修改子主题的自定义帖子类型和自定义页面模板?

时间:2015-06-21 作者:VA-YVR

我需要子主题使用其父自定义帖子类型和对应页面模板的“修改”版本。基本上,我想添加5个新的元框,更改2个现有标签,并在页面模板中包含新字段(下面的代码)。

***“问题”:页面模板的“内容模块”、页面模板本身以及自定义帖子类型的元框正在由主题开发人员编写的本机插件定义/注册。作为一个非常缺乏经验的有抱负的“开发人员”,我正在考虑将修改后的文件保存在孩子的目录中,这与头的想法是一样的。php,并祈祷它覆盖。。。

你能告诉我吗???

    /**
 * Path: wp-content > plugins > theme plugin > includes > post types > class-realia-post-type-property.php 
 */

  $metaboxes[REALIA_PROPERTY_PREFIX . \'attributes\'] = array(
        \'id\'                        => REALIA_PROPERTY_PREFIX . \'attributes\',
        \'title\'                     => __( \'Attributes\', \'realia\' ),
        \'object_types\'              => array( \'property\' ),
        \'context\'                   => \'normal\',
        \'priority\'                  => \'high\',
        \'show_names\'                => true,
        \'fields\'                    => array(
            array(
                \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_beds\',
                \'name\'              => __( \'Beds\', \'realia\' ),
                \'type\'              => \'text\',
            ),
            array(
                \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_baths\',
                \'name\'              => __( \'Baths\', \'realia\' ),
                \'type\'              => \'text\',
            ),
            array(
                \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_garages\',
                \'name\'              => __( \'Garages\', \'realia\' ),
                \'type\'              => \'text\',
            ),
            array(
                \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_area\',
                \'name\'              => __( \'Area\', \'realia\' ),
                \'type\'              => \'text\',
                \'description\'       => __( \'In unit set in settings.\', \'realia\' ),
            ),
            array(
                    \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_NEWONE\',
                    \'name\'              => __( \'NEWONE\', \'realia\' ),
                    \'type\'              => \'text\',
            ),
            array(
                    \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_NEWONE2\',
                    \'name\'              => __( \'NEWONE2\', \'realia\' ),
                    \'type\'              => \'text\',
            ),       
        )
    );

And then, I would go to the page template and:

<div class="entry-content">
    <div class="property-overview">
        <dl>
            <?php $price = Realia_Price::get_property_price(); ?>
            <?php if ( ! empty( $price ) ) : ?>
                <dt><?php echo __( \'Price\', \'realia\' )?></dt><dd><?php echo wp_kses( $price, wp_kses_allowed_html( \'post\' ) ); ?></dd>
            <?php endif; ?>

            <?php $id = get_post_meta( get_the_ID(), REALIA_PROPERTY_PREFIX . \'id\', true ); ?>
            <?php if ( ! empty( $id ) ) : ?>
                <dt><?php echo __( \'ID\', \'realia\' ); ?></dt><dd><?php echo esc_attr( $id ); ?></dd>
            <?php endif; ?>

            <?php $area = get_post_meta( get_the_ID(), REALIA_PROPERTY_PREFIX . \'attributes_area\', true ); ?>
            <?php if ( ! empty( $area ) ) : ?>
                <dt><?php echo __( \'Area\', \'realia\' ); ?></dt><dd><?php echo esc_attr( $area ); ?> <?php echo get_theme_mod( \'realia_measurement_area_unit\', \'sqft\' ); ?></dd>
            <?php endif; ?>

            <?php $baths = get_post_meta( get_the_ID(), REALIA_PROPERTY_PREFIX . \'attributes_baths\', true ); ?>
            <?php if ( ! empty( $baths ) ) : ?>
                <dt><?php echo __( \'Baths\', \'realia\' ); ?></dt><dd><?php echo esc_attr( $baths ); ?></dd>
            <?php endif; ?>

            <?php $beds = get_post_meta( get_the_ID(), REALIA_PROPERTY_PREFIX . \'attributes_beds\', true ); ?>
            <?php if ( ! empty( $beds ) ) : ?>
                <dt><?php echo __( \'Beds\', \'realia\' ); ?></dt><dd><?php echo esc_attr( $beds ); ?></dd>
            <?php endif; ?>

            ?php $NEWONE = get_post_meta( get_the_ID(), REALIA_PROPERTY_PREFIX . \'attributes_NEWONE\', true ); ?>
            <?php if ( ! empty( $NEWONE ) ) : ?>
                <dt><?php echo __( \'NEWONE\', \'realia\' ); ?></dt><dd><?php echo esc_attr( $NEWONE ); ?></dd>
            <?php endif; ?>

             ?php $NEWONE2 = get_post_meta( get_the_ID(), REALIA_PROPERTY_PREFIX . \'attributes_NEWONE2\', true ); ?>
            <?php if ( ! empty( $NEWONE2 ) ) : ?>
                <dt><?php echo __( \'NEWONE2\', \'realia\' ); ?></dt><dd><?php echo esc_attr( $NEWONE2 ); ?></dd>
            <?php endif; ?>

            <?php $garages = get_post_meta( get_the_ID(), REALIA_PROPERTY_PREFIX . \'attributes_garages\', true ); ?>
            <?php if ( ! empty( $garages ) ) : ?>
                <dt><?php echo __( \'Garages\', \'realia\' ); ?></dt><dd><?php echo esc_attr( $garages ); ?></dd>
            <?php endif; ?>
        </dl>
    </div><!-- /.property-overview -->

1 个回复
SO网友:Nia Skywalk

在我看来,这只是对函数的常规添加。既然你在问,我想你可能没有得到你想要的结果。如果这是我的项目,我会创建一个新插件,将其安装到常规插件列表中,这样它就不会在任何地方被覆盖,然后添加新属性。

创建一个名为realia-compatiblity.php 或者类似的东西。

在文件开头添加如下内容:

<?php
/*
  Plugin Name: Realia Child Theme Compatibility Plugin
  Description: This is so my custom stuff doesn\'t get overwritten when the themes and plugins upgrade. Do not remove.
  Version: 1.0
  Author: YOUR NAME HERE
  Author URI: YOUR SITE HERE
  License: LIST LICENSING INFO HERE
*/

// Add your new code here
$metaboxes[REALIA_PROPERTY_PREFIX . \'attributes\'] = array(
    \'id\'                        => REALIA_PROPERTY_PREFIX . \'attributes\',
    \'title\'                     => __( \'Attributes\', \'realia\' ),
    \'object_types\'              => array( \'property\' ),
    \'context\'                   => \'normal\',
    \'priority\'                  => \'high\',
    \'show_names\'                => true,
    \'fields\'                    => array(
        array(
            \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_beds\',
            \'name\'              => __( \'Beds\', \'realia\' ),
            \'type\'              => \'text\',
        ),
        array(
            \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_baths\',
            \'name\'              => __( \'Baths\', \'realia\' ),
            \'type\'              => \'text\',
        ),
        array(
            \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_garages\',
            \'name\'              => __( \'Garages\', \'realia\' ),
            \'type\'              => \'text\',
        ),
        array(
            \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_area\',
            \'name\'              => __( \'Area\', \'realia\' ),
            \'type\'              => \'text\',
            \'description\'       => __( \'In unit set in settings.\', \'realia\' ),
        ),
        array(
                \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_NEWONE\',
                \'name\'              => __( \'NEWONE\', \'realia\' ),
                \'type\'              => \'text\',
        ),
        array(
                \'id\'                => REALIA_PROPERTY_PREFIX . \'attributes_NEWONE2\',
                \'name\'              => __( \'NEWONE2\', \'realia\' ),
                \'type\'              => \'text\',
        ),       
    )
);

?>
然后,您的子主题信息应该可以与新的子主题插件一起使用。

不过,似乎缺少一些命令。我在这里没有看到任何钩子可以钩住一个动作,也没有任何类型的自定义帖子类型的注册。这些看起来像这样:

function custom_post_type() {
  // Some kind of labels
  // Some kind of arguments
  // a call to register_post_type();
};
// Hook into the \'init\' action
add_action(\'init\', \'custom_post_type\', 0);
我对这一切也是相当陌生的,我可能会错过一些东西,然而,似乎你可能需要添加一些比你与我们分享的内容更多的内容。

如果你之前所做的不起作用,也许这会起作用。页面模板中的代码可能保持不变。

我发现这个页面有很多关于自定义帖子类型的有用信息http://www.smashingmagazine.com/2012/11/08/complete-guide-custom-post-types/

我希望这个答案至少有点帮助!祝你好运

EDIT:我一开始碰到这个问题,以为这是一个定制的帖子类问题。然后,当我意识到我要找的东西在这个问题上得到了回应时,我就去研究一个关于我自己主题调整的问题。我重读了你的问题,发现你正在寻找自定义帖子和自定义元数据库的解决方案。因为信息应该添加到函数中。php文件,我的插件方法也可能工作(未测试!)对于此metabox问题。我在这里找到了一些信息,可以为您提供一些启示:http://www.creativebloq.com/wordpress/user-friendly-custom-fields-meta-boxes-wordpress-5113004

我希望现在这里有足够的资源来帮助找到解决方案!

结束

相关推荐

更新上传图片的metabox时出现问题

我创建了一个自定义帖子类型和元框,用于上载另一个图像。问题是,当我添加图像时,它会正确显示在后端的位置,当我更新它时,它也会显示相同的图像。但是当我回到帖子修改它时,我找不到图片,如果我更新帖子,那么就没有图片显示。<?php function hotels_meta_boxes() { add_meta_box( \'hotels_form\', \'Hotels - Détails\', \'hotels_form\', \'hotels\', \'normal\', \'