我用我有限的知识,google和stackexchange创建了一个短代码。
但当我加载页面时,它会加载到页面内容上方,并显示为html文本。
(shortocode text)
-------
page contents appearing normally
正如我所说,我对这种类型的编码知识有限(零),我无法找出哪个部分/什么部分不起作用。
我附加了我使用的代码的压缩版本,在shortcode函数中显示的内容更少。
// Add Shortcode
function p_formatage( $atts , $content = null ) {
// Attributes
extract( shortcode_atts(
array(
\'postid\' => \'\',
\'ptitle\' => \'\',
\'pimage\' => \'\',
), $atts )
);
$postid = $atts[\'postid\'];
$ptitle = $atts[\'ptitle\'];
$pimage = $atts[\'pimage\'];
// Post title
$p-ptitle = if ( empty( $ptitle ) ) {
echo "Whoops! Looks like went wrong here!";
}
else {
if ( $postid == true ) {
echo "<span class="ptitle"><a href="http://www.website.com/\' . $postid . \'">\' . $ptitle . \'</a></span>";
}
else {
echo "<span class="ptitle">\' . $ptitle . \'</span>";
}
}
$p-beta = if ( empty( $pimage) ) {
echo "$ptitle";
}
else {
echo "<span class="pimage"><img href="http://www.website.com/xx.jpg";/></span>";
}
$pclass = if ( $postid ) {
echo "$p-ptitle";
}
else {
echo "$p-beta";
}
// Output
$output = {
echo "$pclass";
}
return $output;
}
add_shortcode( \'p-fmt\', \'p_formatage\' );
最合适的回答,由SO网友:engelen 整理而成
您正在使用shortcode函数直接输出某些内容(使用echo
). 短代码应该返回所需的输出,而不是直接回显。你可以使用output buffering “捕获”输出的任何内容(例如,通过echo
) 在输出缓冲区中,而不是直接输出它,然后检索缓冲区的内容。
这将产生如下实现:
function wpse149825_my_shortcode( $atts, $content = NULL ) {
// Turn on output buffering, which sends output from "echo" to a "buffer" instead of directly outputting it
ob_start();
// Output shortcode content
echo \'Shortcode content\';
// Get buffer contents
$contents = ob_get_clean();
// Return shortcode content
return $contents;
}
add_shortcode( \'my_shortcode\', \'wpse149825_my_shortcode\' );
SO网友:Subharanjan
您需要修复中断的echo语句。此外,正如上文@engelen所说,不要直接回应输出。使其成为缓冲区并“返回”它。
下面是有帮助的代码。
<?php
// Add Shortcode
function p_formatage( $atts, $content = null ) {
// Attributes
extract( shortcode_atts(
array(
\'postid\' => \'\',
\'ptitle\' => \'\',
\'pimage\' => \'\',
),
$atts,
\'p-fmt\'
)
);
$postid = $atts[\'postid\'];
$ptitle = $atts[\'ptitle\'];
$pimage = $atts[\'pimage\'];
// Start buffering the output
ob_start();
/* ------ DO WHATEVER OUTPUT YOU WANT TO DISPLAY BELOW THIS -------- */
// Post title
if ( empty( $ptitle ) ) {
echo \'Whoops! Looks like went wrong here!\';
} else {
if ( $postid == true ) {
echo \'<span class="ptitle"><a href="http://www.website.com/\' . $postid . \'">\' . $ptitle . \'</a></span>\';
} else {
echo \'<span class="ptitle">\' . $ptitle . \'</span>\';
}
}
/* ------ STOP SPITING OUT THE OUTPUT NOW ------------------------ */
// Get buffer contents
$contents = ob_get_clean();
// Return shortcode content
return $contents;
}
add_shortcode( \'p-fmt\', \'p_formatage\' );