【发布时间】:2020-07-08 15:02:37
【问题描述】:
我的functions.php中有这个自定义短代码,我通过wordpress后端使用[landingpage]Some content here[/landingpage]调用它。
add_shortcode('landingpage', function ($atts, $content = NULL, $tag = NULL) {
$atts = shortcode_atts(['post_id' => 0], $atts, $tag);
if (empty($atts['post_id']) || empty($post = get_post($atts['post_id']))) {
return ''; // return nothing, a proper post_id was not passed by the user
}
ob_start();
?>
<h2>Title: <?= $post->post_title ?></h2>
<p><?= $content ?: $post->post_excerpt ?></p>
<p><a href="<?= get_permalink($post->ID) ?>">Read More</a></p>
<?php
return ob_get_clean();
});
我用以下代码制作了一个自定义页面模板
<?php
/**
* Template Name: Landingpage
*/
get_header(); ?>
<div class="col kb_landing_left">
<?= do_shortcode('[landingpage post_id="56"]') ?>
</div>
<div class="col-sm-6">
<?php foreach ([1, 86, 88] as $post_id) : ?>
<div class="row">
<div class="col kb_landing_right">
<?= do_shortcode("[landingpage post_id='{$post_id}']") ?>
</div>
</div>
<?php endforeach; ?>
</div>
<?php
get_footer();
显示标题和“阅读更多”(重定向到正确的帖子)。但内容本身完全缺失。出于调试目的,我添加了一个字符串来查看ID提交是否有问题:
if (empty($atts['post_id']) || empty($post = get_post($atts['post_id']))) {
return 'post_id is missing'; // return nothing, a proper post_id was not passed by the user
}
这也没有显示,因此提交了 ID。
我安装了一些插件,因此将它们全部停用以确保问题与这些无关。什么都没有改变。
一些一般信息;我正在使用 Bootstrap 4 Starter 主题,分别为它制作了一个子主题。其他一切都在正常工作。我不知道短代码不显示帖子内容有什么问题。
非常感谢任何帮助!
这里是 var_dump($post); 的输出
object(WP_Post)#8044 (24) {
["ID"]=>
int(56)
["post_author"]=>
string(1) "1"
["post_date"]=>
string(19) "2020-06-24 22:56:11"
["post_date_gmt"]=>
string(19) "2020-06-24 22:56:11"
["post_content"]=>
string(591) "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."
["post_title"]=>
string(6) "Test 2"
["post_excerpt"]=>
string(20) "some excerpt content"
["post_status"]=>
string(7) "publish"
["comment_status"]=>
string(4) "open"
["ping_status"]=>
string(4) "open"
["post_password"]=>
string(0) ""
["post_name"]=>
string(4) "test"
["to_ping"]=>
string(0) ""
["pinged"]=>
string(0) ""
["post_modified"]=>
string(19) "2020-07-07 21:34:30"
["post_modified_gmt"]=>
string(19) "2020-07-07 21:34:30"
["post_content_filtered"]=>
string(0) ""
["post_parent"]=>
int(0)
["guid"]=>
string(31) "https://wiki.fiveseven.ch/?p=56"
["menu_order"]=>
int(0)
["post_type"]=>
string(4) "post"
["post_mime_type"]=>
string(0) ""
["comment_count"]=>
string(1) "0"
["filter"]=>
string(3) "raw"
}
【问题讨论】:
-
肯定在您的示例中
$content将是NULL,因为您对短代码的调用没有像[landingpage post_id="56"]some content[/landingpage]那样传递给它的内容。我怀疑您的$post->post_excerpt也是一个空字符串。如果是这种情况,那么您的代码将按预期工作,但您可能希望输出其他内容,例如get_the_content(null, false, $post)等。但首先,为了调试我的假设,请在<p><?= $content ?: $post->post_excerpt ?></p>上方添加<?php var_dump($post); ?>,并在问题的末尾发布它的输出。 -
@Phil,感谢您回复我。我刚刚意识到,您的意思是后端的专用摘录框...如果我在其中输入一些文本,它就会显示出来。但是,仍然缺少实际内容。我按照您的建议添加了 var_dump 功能,输出在我的问题末尾。好吧,那里的内容是可见的(和摘录),但如果我再次删除 var_dump 功能,只有摘录仍然显示。
标签: wordpress