当前位置: 首页 > 知识库问答 >
问题:

如何修复一个短代码,以显示其内容在正确的位置?

左丘耀
2023-03-14

我试图创建一个短代码,将显示基于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');

共有1个答案

麹承
2023-03-14

短代码函数需要返回不与文本相呼应的内容。

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');
 类似资料:
  • 我正在建立一个基于JS的选项卡导航,但不知怎么选项卡内容没有正确显示。其思想是只显示活动状态的选项卡内容。 我只想让选项卡内容显示属于该选项卡的内容。 代码如下所示: null null 我找不到错误。非常感谢任何帮助。 预先默许 a

  • 问题内容: 我已经开发了一个小应用程序来跟踪我的日常工作活动,该工具包含两个类: 执行者 UIProgress 我的目标是创建一个ProgressBar来更新执行状态,使用的逻辑如下所示, 根据Executor类中定义的executeTask(),我创建了UIProgress对象。 UIProgress类扩展了JFrame。创建一个面板,其中包含带有一个图像的标签和进度条。我已经在此类中定义了一个

  • 我开发了一个小应用程序来跟踪我的日常工作活动,该工具包含两个类: 遗嘱执行人 我的目标是创建一个更新执行状态的ProgressBar,下面给出了使用的逻辑, 从Exector类中定义的执行任务()中,我创建了UIProgress对象。 UIProgress类扩展了JFrame。创建一个包含带有一个图像和进度条的标签的面板。我在这个类中定义了一个方法updateProgress,它设置了进度条的值。

  • 你能解释一下如何在此代码中显示另一个文本视图吗?我使用的是viewpager,所以我只打印一个textview,我想再打印一个textview。任何人都可以帮我。提前谢谢。 这是我的代码 这是我的主要活动课 这是我的gridview类- 此代码表示单击网格视图项目时此页面将调用此页面是具有网格视图项目的viewpager此类是viewpager- 这是我的申请看看 这是我的Gridview外观,当

  • 我有下面的代码,我过去经常点击特定的按钮来显示或隐藏内容,它成功地工作了,但这不仅仅是我想要的,而且当一个内容显示时,我想要的也不可能是另一个打开,这意味着如果我显示其中一个内容并试图显示另一个内容,第二个内容将导致第一个内容显示自动崩溃,但我失败了,我怎么能做到呢。 我的代码