WordPress自定义快捷码与媒体库冲突

时间:2020-03-02 作者:Chipsy

我编写了一个小函数,它使用一个短代码显示一个称为推荐的自定义帖子类型(在我的例子中)。

短代码运行正常。但我注意到了一个主要问题。

调用Shortcode函数后,我的WordPress媒体库不会显示/加载。

只要我删除了Shortcode函数,它就会工作。

我尝试了WP\\U调试以查看是否有错误,但它没有显示任何内容。

此外,检查了php\\u错误日志、apache\\u错误日志,没有什么可以帮助我的。

然后我去了站点健康选项,在那里我看到了

“REST API行为不正确”“REST API未正确处理上下文查询参数”

下面是自定义快捷码函数-

<!-- Shortcode display testimonials-->
<?php

function display_testimonials()
{
    ?><div class="owl-carousel owl-theme">
    <?php
    $args = array(
        \'post_type\' => \'testimonials\',
        \'post_status\' => \'published\',

    );
    $testimonials = new WP_Query($args);

    if($testimonials->have_posts()):while($testimonials->have_posts()):$testimonials->the_post();
    ?>

    <div class="item testimonial_box">
    <div class="testimonial_1box">
        <span class="testimonial_stars"><?php $stars = get_field(\'stars\'); echo $stars;?></span>

        <span class="testimonial_content"><?php the_content();?></span>
        <h4 class="testimonial_title"><?php the_title();?></h4>

    </div>

        <div class="testimonial_2box">
            <figure class="figure_testimonial_image">
                <img class="testimonial_image" src="<?php the_post_thumbnail();?>
            </figure>
        </div>
    </div>



    <?php endwhile; else: ?>

<p>Sorry, there are no posts to display Lavede</p>

<?php endif;?>


</div>
<?php

wp_reset_postdata();


}

function testimonial_shortcode()
{
    add_shortcode(\'TestimonialITW\', \'display_testimonials\');
}

add_action(\'init\', \'testimonial_shortcode\');

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

首先,我假设您将代码放在主题中functions.php 文件,如果是,则该文件中不应回显直接输出:

很好:

<?php // Assume this is wp-content/themes/your-theme/functions.php
function some_func() {
    echo \'This is a good output; it\\\'s not a direct output coming from the file.\';
    echo \'The output is only displayed when you call the function - some_func().\';
}

<!-- This is a HTML comment and it\'s a sample direct output. -->
<?php // Assume this is wp-content/themes/your-theme/functions.php
function some_func() {
    echo \'This is a good output; it\\\'s not a direct output coming from the file.\';
    echo \'The output is only displayed when you call the function - some_func().\';
}
<!-- Shortcode display testimonials--> 在文件的顶部(即functions.php 文件)。因此,删除该注释,错误就会消失。

除此之外,代码中的另一个问题是,您需要确保您的短代码是返回输出,而不是回显输出。如果您回显它,则输出将显示在错误的位置(即不是您放置[TestimonialITW] 在帖子内容中),当您更新具有短代码的帖子时,可能会看到一个错误,上面写着“更新失败。错误消息:响应不是有效的JSON响应。”;因为响应包含来自短代码的输出(例如HTML标记,如<div class="owl-carousel owl-theme">).

但如果需要回显,可以使用output buffering:

function testimonial_shortcode()
{
    ob_start();             // turn on output buffering
    display_testimonials(); // put the output to the buffer
    return ob_get_clean();  // capture and return the buffer
}
add_shortcode( \'TestimonialITW\', \'testimonial_shortcode\' );
这将取代以下内容:

function testimonial_shortcode()
{
    add_shortcode(\'TestimonialITW\', \'display_testimonials\');
}

add_action(\'init\', \'testimonial_shortcode\');
此外,除非您注册了名为published, 那个\'post_status\' => \'published\' 应该是\'post_status\' => \'publish\'.

相关推荐

Custom Post type shortcodes

我使用高级自定义字段在我的主题中创建自定义帖子类型(功能)。我想知道如何创建自定义帖子类型的短代码。因此,我只使用任何页面的自定义帖子类型的短代码来显示我在自定义帖子类型(功能)中添加的信息。