我试图创建一个短代码,将显示基于Schema.org人员类型的一些信息。
我创建了这个简单的测试短代码,它将呼应一个短语。短语是:个人信息
。下面是代码:
function add_schema_person_shortcode() {
echo '<div class="schema_person_microdata_container">';
echo '<div itemscope itemtype="http://schema.org/Person">';
echo '<h3>'; echo 'Personal Info'; echo '</h3>';
echo '</div>';
echo '</div>';
}
add_shortcode( 'schema-person-shortcode', 'add_schema_person_shortcode');
我的问题是短语个人信息
显示在所有内容的顶部,即使短代码上方有内容。
请点击此处查看此测试帖子。
帖子内容为:
<p>this is text written ABOVE the shortcode.</p>
[schema-person-shortcode]
<p>this is text written below the shortcode.</p>
由于我没有任何特殊的代码来强制短代码内容显示在页面顶部,我无法确定错误在哪里。
如果有人能告诉我如何解决这个问题的正确方向,并让简码内容显示在正确的位置,我将不胜感激。
提前谢谢。
编辑
我从下面的@Andrew Schultz那里得到了一个很好的答案,但是只有当我想显示文本时,它才对我有效。为了简单起见,我在最初的问题中添加了一个虚拟代码。
但是,我的完整代码有if语句,因此我将在下面粘贴完整代码,以帮助在代码中有if语句时获得解决方案。
谢谢。
function add_schema_person_shortcode() {
if (ICL_LANGUAGE_CODE == 'ar') {
if( function_exists( 'types_render_field' ) ){
$author_info = array_filter( array (
'honorificPrefix' => types_render_field( "schema-person-honorific-prefix", array () ),
'givenName' => types_render_field( "schema-person-given-name", array () ),
'familyName' => types_render_field( "schema-person-family-name", array () ),
'honorificSuffix' => types_render_field( "schema-person-honorific-suffix", array () ),
) );
$author_additional_name = array_filter( array (
'additionalName' => types_render_field( "schema-person-additional-name", array () ),
) );
$person_monastic_name = array_filter( array (
'additionalName' => types_render_field( "schema-person-monastic-name", array () ),
) );
$person_date_of_birth = array_filter( array (
'birthDate' => types_render_field( "schema-person-date-of-birth", array () ),
) );
$person_place_of_birth = array_filter( array (
'birthPlace' => types_render_field( "schema-person-place-of-birth", array () ),
) );
if ( ! empty( $author_info ) ) {
echo '<div class="schema_person_microdata_container">';
echo '<div itemscope itemtype="http://schema.org/Person">';
echo '<h3>'; echo 'كارت التعريف بالشخصية'; echo '</h3>';
echo '<table class="schema_book_microdata_table">';
echo '<tr>';
echo '<th class="schema-book-table-initial-column">'; echo 'البيانات'; echo '</th>';
echo '<th>';echo 'التفاصيل'; echo '</th>';
echo '</tr>';
echo '<tr><td>الأسم</td><td>';
foreach ( $author_info as $prop => $value ) {
printf( '<span itemprop="%s"> %s </span>', $prop, $value );
}
echo '</span></td></tr>';
if ( ! empty( $author_additional_name ) ) {
echo '<tr><td>الأسم قبل الرسامة</td><td>';
foreach ( $author_additional_name as $prop => $value ) {
printf( '<span itemprop="%s"> %s </span>', $prop, $value );
}
echo '</span></td></tr>';
}
if ( ! empty( $person_monastic_name ) ) {
echo '<tr><td>الأسم الرهباني</td><td>';
foreach ( $person_monastic_name as $prop => $value ) {
printf( '<span itemprop="%s"> %s </span>', $prop, $value );
}
echo '</span></td></tr>';
}
if ( ! empty( $person_date_of_birth ) ) {
echo '<tr><td>تاريخ الميلاد</td><td>';
foreach ( $person_date_of_birth as $prop => $value ) {
printf( '<span itemprop="%s"> %s </span>', $prop, $value );
}
echo '</span></td></tr>';
}
if ( ! empty( $person_place_of_birth ) ) {
echo '<tr><td>محل الميلاد</td><td>';
foreach ( $person_place_of_birth as $prop => $value ) {
printf( '<span itemprop="%s"> %s </span>', $prop, $value );
}
echo '</span></td></tr>';
}
echo '</table>';
echo '</div>';
echo '</div>';
}
}
}
}
add_shortcode( 'schema-person-shortcode', 'add_schema_person_shortcode');
短代码函数需要返回不与文本相呼应的内容。
function add_schema_person_shortcode() {
$content = '<div class="schema_person_microdata_container">';
$content .= '<div itemscope itemtype="http://schema.org/Person">';
$content .= '<h3>Personal Info</h3>';
$content .= '</div>';
$content .= '</div>';
return $content;
}
add_shortcode( 'schema-person-shortcode', 'add_schema_person_shortcode');
这里我演示了如何使用PHP输出缓冲区来收集所有echo输出,然后捕获它并在函数末尾返回它。
function add_schema_person_shortcode() {
ob_start();
if (ICL_LANGUAGE_CODE == 'ar') {
if( function_exists( 'types_render_field' ) ){
$author_info = array_filter( array (
'honorificPrefix' => types_render_field( "schema-person-honorific-prefix", array () ),
'givenName' => types_render_field( "schema-person-given-name", array () ),
'familyName' => types_render_field( "schema-person-family-name", array () ),
'honorificSuffix' => types_render_field( "schema-person-honorific-suffix", array () ),
) );
$author_additional_name = array_filter( array (
'additionalName' => types_render_field( "schema-person-additional-name", array () ),
) );
$person_monastic_name = array_filter( array (
'additionalName' => types_render_field( "schema-person-monastic-name", array () ),
) );
$person_date_of_birth = array_filter( array (
'birthDate' => types_render_field( "schema-person-date-of-birth", array () ),
) );
$person_place_of_birth = array_filter( array (
'birthPlace' => types_render_field( "schema-person-place-of-birth", array () ),
) );
if ( ! empty( $author_info ) ) {
echo '<div class="schema_person_microdata_container">';
echo '<div itemscope itemtype="http://schema.org/Person">';
echo '<h3>'; echo 'كارت التعريف بالشخصية'; echo '</h3>';
echo '<table class="schema_book_microdata_table">';
echo '<tr>';
echo '<th class="schema-book-table-initial-column">'; echo 'البيانات'; echo '</th>';
echo '<th>';echo 'التفاصيل'; echo '</th>';
echo '</tr>';
echo '<tr><td>الأسم</td><td>';
foreach ( $author_info as $prop => $value ) {
printf( '<span itemprop="%s"> %s </span>', $prop, $value );
}
echo '</span></td></tr>';
if ( ! empty( $author_additional_name ) ) {
echo '<tr><td>الأسم قبل الرسامة</td><td>';
foreach ( $author_additional_name as $prop => $value ) {
printf( '<span itemprop="%s"> %s </span>', $prop, $value );
}
echo '</span></td></tr>';
}
if ( ! empty( $person_monastic_name ) ) {
echo '<tr><td>الأسم الرهباني</td><td>';
foreach ( $person_monastic_name as $prop => $value ) {
printf( '<span itemprop="%s"> %s </span>', $prop, $value );
}
echo '</span></td></tr>';
}
if ( ! empty( $person_date_of_birth ) ) {
echo '<tr><td>تاريخ الميلاد</td><td>';
foreach ( $person_date_of_birth as $prop => $value ) {
printf( '<span itemprop="%s"> %s </span>', $prop, $value );
}
echo '</span></td></tr>';
}
if ( ! empty( $person_place_of_birth ) ) {
echo '<tr><td>محل الميلاد</td><td>';
foreach ( $person_place_of_birth as $prop => $value ) {
printf( '<span itemprop="%s"> %s </span>', $prop, $value );
}
echo '</span></td></tr>';
}
echo '</table>';
echo '</div>';
echo '</div>';
}
}
}
$function_output = ob_get_contents();
ob_end_clean();
return $function_output;
}
add_shortcode( 'schema-person-shortcode', 'add_schema_person_shortcode');