【问题标题】:Wordpress Shortcode Function is displaying before contentWordpress 简码功能在内容之前显示
【发布时间】:2018-08-21 00:20:12
【问题描述】:

我一直在努力让这个简码正确显示,但我尝试过的一切都不起作用。以下是我的功能:

    function monster_shortcode( $atts ) {

    $monster = $atts['name'];

    $query = new WP_Query( array(
        'post_type' => 'monsters',
        'name' => $monster,
    ));

    if ( $query->have_posts() ) { 
    while ( $query->have_posts() ) : $query->the_post();
    $monster_title = the_title();
    $monster_size = the_field('size');
    $monster_type = 'type';
    $monster_alignment = the_field( 'alignment' );
    $monster_ac = the_field( 'armor_class' );
    $monster_ac_type = the_field( 'ac_type' );
    $monster_hp = the_field( 'hit_points' );
    $monster_hd = the_field( 'hit_die' );
    $monster_speed = the_field( 'speed' );
    $monster_str = the_field( 'str' );
    $monster_strb = monster_stats( get_field( 'str' ) );
    $monster_dex = the_field( 'dex' );
    $monster_dexb = monster_stats( get_field( 'dex' ) );
    $monster_con = the_field( 'con' );
    $monster_conb = monster_stats( get_field( 'con' ) );
    $monster_int = the_field( 'int' );
    $monster_intb = monster_stats( get_field( 'int' ) );
    $monster_wis = the_field( 'wis' );
    $monster_wisb = monster_stats( get_field( 'wis' ) );
    $monster_cha = the_field( 'cha' );
    $monster_chab = monster_stats( get_field( 'cha' ) );
    $monster_saves = the_field( 'saving_throws' );
    $monster_skills = the_field( 'skills' );
    $monster_dmg = the_field( 'damage_adjustments' );
    $monster_senses = the_field( 'senses' );
    $monster_lang = the_field( 'languages' );
    $monster_cr = the_field( 'cr' );
    $monster_actions = the_field( 'actions' );
    $monster_reactions = the_field( 'reactions' );
    $monster_char = the_field( 'characteristics' );
    $monster_content = the_content();
    $monster_enviro = the_field( 'enviroments' );

    $return = '<h1 class="entry-title">' . $monster_title . '</h1>';
    $return .= '<div class="monster-meta">' . $monster_size . ' ' . $monster_type . ', ' . $monster_alignment . '</div>';
    $return .= '<ul class="monster-stat">';
        $return .= '<li><label>Armor Class</label> ' . $monster_ac . ' (' . $monster_ac_type . ')</li>';
        $return .= '<li><label>Hit Points</label> ' . $monster_hp . ' (' . $monster_hd . ')</li>';
        $return .= '<li><label>Speed</label> ' . $monster_speed . '</li>';
    $return .= '</ul>';
    $return .= '<ul class="monster-stat abilities">';
        $return .= '<li><label>STR</label>' . $monster_str . ' (' . $monster_strb . ')</li>';
        $return .= '<li><label>DEX</label>' . $monster_dex . ' (' . $monster_dexb . ')</li>';
        $return .= '<li><label>CON</label>' . $monster_con . ' (' . $monster_conb . ')</li>';
        $return .= '<li><label>INT</label>' . $monster_int . ' (' . $monster_intb . ')</li>';
        $return .= '<li><label>WIS</label>' . $monster_wis . ' (' . $monster_wisb . ')</li>';
        $return .= '<li><label>CHA</label>' . $monster_cha . ' (' . $monster_chab . ')</li>';
    $return .= ' </ul>';
    $return .= '<ul class="monster-stat">';
        $return .= '<li><label>Saving Throws</label> ' . $monster_saves . '</li>';
        $return .= '<li><label>Skills</label> ' . $monster_skills . '</li>';
        $return .= '<li><label>Damage Adjustments</label> ' . $monster_dmg . '</li>';
        $return .= '<li><label>Senses</label> ' . $monster_senses . '</li>';
        $return .= '<li><label>Langauage</label> ' . $monster_lang . '</li>';
        $return .= '<li><label>Challenge Rating</label> ' . $monster_cr . '</li>';
    $return .= '</ul>';
    $return .= '<p>' . $monster_traits . '</p>';
    $return .= '<h4 class="monster-label">Actions</h2><p>' . $monster_actions . '</p>';
    $return .= '<h4 class="monster-label">Reactions</h2><p>' . $monster_reactions . '</p>';
    $return .= '<h4 class="monster-label">Characteristics</h2><p>' . $monster_char . '</p>';
    $return .= '<h4 class="monster-label">Details</h2><p>' . $monster_content . '</p>';               
    $return .= '<p><label>Enviroments:</label> ' . $monster_enviro . '</p>';

    endwhile;
    }
    return $return;
    wp_reset_postdata();

}
add_shortcode( 'monster', 'monster_shortcode' );

然后我将简码 [monster name="men-at-arms"] 放在页面上。所有函数 $variables 显示在帖子内容之前,所有函数 html 显示它应该在哪里。你可以在这里看到输出https://www.dropbox.com/s/xvuqofya1jylsfl/Screenshot%20%283%29.png?dl=0

【问题讨论】:

    标签: wordpress shortcode


    【解决方案1】:

    您使用的是 display 函数而不是 return 函数。

    the_title() 将逐字地呼应标题。如果你想把它作为一个变量,你需要使用get_the_title()(或者你可以在the_title()中将第三个参数设置为false——但这通常是不可取的)

    这适用于您正在使用的所有输出值的函数。

    the_title() => get_the_title()
    the_field() => get_field()
    the_content() => get_the_content()

    由于它现在正在提取托管帖子的内容,因此您需要将 ID 从短代码传递给函数。要么这样:

    $monster    = $atts['name'];
    $monster_id = $atts['id'];
       ...
    $monster_title = get_the_title( $monster_id );
    $monster_size  = get_field( 'size', $monster_id );
    

    或者像这样:

    $monster    = $atts['name'];
       ...
    $monster_title = get_the_title( $post->ID );
    $monster_size  = get_field( 'size', $post->ID );
    

    或者,您可以删除所有变量定义,只修改 HTML 返回部分。

    while ( $query->have_posts() ) : $query->the_post(); ?>
        <h1 class="entry-title"><?php the_title(); ?></h1>
        <div class="monster-meta"><?php the_field('size'); ?> <?php the_field('type'); ?> <?php the_field('alignment'); ?>
            <ul class="monster-stat">
             ...
        </div>
    <?php endwhile; ?>
    

    【讨论】:

    • 这修复了它,所以现在数据在模板中。但是现在它从简码所在的帖子中提取数据,而不是简码数据。
    • 我已经更新了答案 - 您要么需要将 ID 传递给函数:get_the_title( $desired_id ),要么您可以删除所有变量定义并将原始显示函数放在 HTML 块中
    • 这行得通,除非我不确定如何为短代码中使用的帖子调用帖子 ID。我只有在发布时输入短代码的名称。但是我如何进入这个功能呢?我通过手动输入帖子 ID 来显示它,只是为了测试这是否是问题所在。
    • 那么使用第二个解决方案可能更容易$monster_title = get_the_title( $post-&gt;ID ); - 此代码:while ( $query-&gt;have_posts() ) : $query-&gt;the_post(); 应该设置$post(因此$post-&gt;ID 设置为适当的帖子供您的HTML使用
    • 是的,您的循环实际上正在发生一些奇怪的事情,因为否则get_the_title() 应该可以在不定义 id 的情况下正常工作。您可以尝试将您的$query 重命名为喜欢$monster_query,看看是否可行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    相关资源
    最近更新 更多