修改子主题中的博客模块布局

时间:2016-03-17 作者:Jeff Sydor

我需要调整他们的博客模块中特色图像的显示方式。

我需要将特征图像的显示从IMG标记更改为背景图像。因此,我可以修改图像的帧(DIV),而不会扭曲图像本身。

我可以在我的子主题的默认博客页面(index.php)上这样做。查看我的网站上的任何类别页面。

我需要对优雅主题博客模块做同样的操作。

我把范围缩小到这个编辑需要用到的函数。但我不确定如何将其添加到我孩子的主题中functions.php 文件

这基本上就是代码(去掉不必要的部分):

add_shortcode( \'et_pb_blog\', \'et_pb_blog\' );
function et_pb_blog( $atts ) {

    ob_start();

    query_posts( $args );

    if ( have_posts() ) {
        while ( have_posts() ) {
            the_post();

            $post_format = get_post_format();

            $thumb = \'\';

            $width = \'on\' === $fullwidth ? 1080 : 400;
            $width = (int) apply_filters( \'et_pb_blog_image_width\', $width );

            $height = \'on\' === $fullwidth ? 675 : 250;
            $height = (int) apply_filters( \'et_pb_blog_image_height\', $height );
            $classtext = \'on\' === $fullwidth ? \'et_pb_post_main_image\' : \'\';
            $titletext = get_the_title();
            $thumbnail = get_thumbnail( $width, $height, $classtext, $titletext, $titletext, false, \'Blogimage\' );
            $thumb = $thumbnail["thumb"]; 

            $no_thumb_class = \'\' === $thumb || \'off\' === $show_thumbnail ? \' et_pb_no_thumb\' : \'\';

            if ( in_array( $post_format, array( \'video\', \'gallery\' ) ) ) {
                $no_thumb_class = \'\';
            } ?>

        <article id="post-<?php the_ID(); ?>" <?php post_class( \'et_pb_post\' . $no_thumb_class ); ?>>

        <?php if ( \'off\' === $fullwidth || ! in_array( $post_format, array( \'link\', \'audio\', \'quote\', \'gallery\' ) ) ) { ?>
            <?php if ( ! in_array( $post_format, array( \'link\', \'audio\' ) ) ) { ?>
                <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <?php } ?>

            <?php
                et_divi_post_format_content();

                if ( ! in_array( $post_format, array( \'link\', \'audio\', \'quote\' ) ) ) {
                    if ( \'video\' === $post_format && false !== ( $first_video = et_get_first_video() ) ) :
                        printf(
                            \'<div class="et_main_video_container">
                                %1$s
                            </div>\',
                            $first_video
                        );
                    elseif ( \'gallery\' === $post_format ) :
                        et_gallery_images();
                    elseif ( \'\' !== $thumb && \'on\' === $show_thumbnail ) :
                        if ( \'on\' !== $fullwidth ) echo \'<div class="et_pb_image_container">\'; ?>
                            <a href="<?php the_permalink(); ?>">
                                <?php print_thumbnail( $thumb, $thumbnail["use_timthumb"], $titletext, $width, $height ); ?>
                            </a>
                    <?php
                        if ( \'on\' !== $fullwidth ) echo \'</div> <!-- .et_pb_image_container -->\';
                    endif;
                }

}
就在包含$thumb = $thumbnail["thumb"]; 我想添加这行代码:

$feat_image = wp_get_attachment_url( get_post_thumbnail_id(/* $post->ID */) );

接下来我需要换衣服

<?php print_thumbnail( $thumb, $thumbnail["use_timthumb"], $titletext, $width, $height ); ?>

<div class="post-top-feat_img" title="blog-post-image" style="background: url(<?php echo $feat_image; ?>) no-repeat; background-size: cover;"></div>

同样,我不知道如何将其适当地添加到我的子主题的函数文件中。当我按照优雅主题公司的支持人员所说的去做时,我发现了这个错误。

Fatal error: 无法在中重新声明et\\u pb\\u blog()(以前在/childTheme/functions.php:310中声明)/parentTheme/functions.php 在线4026

我尝试过用几种不同的方法删除短代码,然后在我的子主题中用新代码重新添加它,但这要么会抛出相同的错误,要么会忽略它。不知道接下来该怎么办。我可以在父主题中进行此操作,但我不希望这样做。

非常感谢您的帮助。

1 个回复
SO网友:Sumit

子主题比父主题先加载。与其他模板文件不同functions.php 的子主题与父主题的functions.php 而不是被覆盖。

所以一个函数,即。et_pb_blog() 在父主题中声明的不能在子主题中重新声明。

Solution:

<删除子主题中的短代码,然后使用不同的回调函数名与子主题一起重新添加示例:

/* Remove shortcode that was added in parent them */
remove_shortcode(\'et_pb_blog\');


add_shortcode(\'et_pb_blog\', \'et_pb_blog_custom\');
/**
 * Add the shortcode again with diffrent function name
 * @return string $shortcode_content
 */
function et_pb_blog_custom($atts) {
    ob_start();

    //Do watever you want

    $content = ob_get_contents(); //Get the buffer contnet
    ob_end_clean(); // turn off buffering
    return $content; // Return the content
}
建议:切勿使用query_posts() 相反,尝试使用get_posts() 或大多数首选WP_Query(). Continue reading here

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\