WordPress快捷码加载在顶部

时间:2013-01-16 作者:Philipp

我在这里尝试了所有主题的解决方案,但没有找到解决方案。我为一个短代码制作了一个插件。我的问题是插件代码总是加载在内容之上。我已经发现它来自于echo. 相反,我应该使用return. 但只要我更换echo 插件停止工作;(

如果有人能帮助我,那就太好了。

非常感谢。

function sublime_video_playlist() {
wp_enqueue_script(\'sublime_video\', \'\' .plugins_url( \'/js/sublime_playlist.js\' , __FILE__ ). \'\');

global $post;

$attachments = get_children( array(
                \'post_parent\'    => $pageChild->ID,
                \'post_type\'      => \'attachment\',
                \'numberposts\'    => 1, // show all -1
                \'post_status\'    => \'inherit\',
                \'post_mime_type\' => \'video\',
                \'order\'          => \'ASC\',
                \'orderby\'        => \'menu_order ASC\'
                ) );


if ( $attachments ) {

  echo \'<div class="sp shadow"><img src="/content/themes/maxx-wp/images/large-seperator.png"></div>\';
  echo \'<h3>Videos</h3>\';

  echo \'<div id="playlist1" class="sv_playlist">\';

  $args = array(
    \'post_type\' => \'attachment\',
    \'post_mime_type\' => \'video\',
    \'numberposts\' => null,
    \'post_status\' => null,
    \'orderby\' => \'title\',
    \'post_parent\'    => $post->ID
);

$attachments = get_posts($args);

if ($attachments) {
    foreach ($attachments as $attachment) {
        echo \'<div class="video_wrap">\';
        echo \'<video width="568" height="320" id="video\';
        echo $attachment->ID;
        echo \'" data-settings="autoresize:fit" poster="\';
        echo \'" preload="true">\';
        echo \'<source src="\';
        echo wp_get_attachment_url ($attachment->ID);
        echo \'" /></video>\';
        echo \'</div>\';

    }

    echo \'<ul class="thumbs">\';

$args = array(
    \'post_type\' => \'attachment\',
    \'post_mime_type\' => \'video\',
    \'numberposts\' => null,
    \'post_status\' => null,
     \'orderby\' => \'title\',
    \'post_parent\' => $post->ID
); 
$attachments = get_posts($args);

if ($attachments) {
    foreach ($attachments as $attachment) {
        echo \'<li style="padding:0px;" id="thumbnail_video\';
        echo $attachment->ID;
        echo \'">  <a href=" "> <img style="height:100%" alt="" src="\';
        echo wp_get_attachment_url( get_post_thumbnail_id($post->ID));
        echo \'" width="144" height="71" /> <span class="play" /> </a> </li>\';

}
} 

    echo \'</ul></div>   

 <div style="margin-bottom: -19px; float:right">\'; 
            if(function_exists(\'render_tnwsc_button\')) {
                echo render_tnwsc_button();
            }
    echo \'</div>\';

}
}
}
add_shortcode(\'video_playlist\', \'sublime_video_playlist\');  ?>

2 个回复
最合适的回答,由SO网友:diggy 整理而成

首先,声明变量:

$return = \'\';
然后,在整个代码中,串联项目:

$return .=  \'<div class="sp shadow"><img src="..."></div>\';
$return .=  \'<h3>Videos</h3>\';
最后,返回结果:

return $return;

SO网友:Chris_O

在您的情况下,最好保留echo并使用输出缓冲。

添加ob\\u start();到函数的第一行。

在函数末尾添加

$output = ob_get_clean();
return $output;
此外,您不能将脚本从短代码中排队。它运行到很晚,永远不会加载。只需创建一个添加到wp\\u enqueue\\u scripts挂钩的函数。如果不希望在每个页面上加载脚本,请添加一个条件,以检查找到的短代码。

function c3m_find_short_code( $shortcode ) {
    if ( ! is_singular() )
        return false;

    $post_to_check = get_post( get_the_ID() );
    if ( stripos( $post_to_check->post_content, \'[\' . $shortcode ) !== false )
        return true;

    return false;
}


function my_shortcode_enqueue() {
    if ( c3m_find_short_code( \'shortcode_name_here\' );
        wp_enqueue_script( \'blah\', \'/path_to_blah.js\' );
}

add_action( \'wp_enqueue_scripts\', \'my_shortcode_enqueue\' );

结束

相关推荐

A /proc folder in wp-content?

我继承了一个WordPress网站,这个网站是由一系列顾问创建的,他们都已经离开很久了。当我想找到他们在哪里定义了一个奇怪的短代码时,grep在试图读取文件时抛出了一系列错误ABSPATH/wp-content/proc.比较ABSPATH/wp-content/proc 真实的/proc 在我的服务器上,我怀疑有人复制了/proc 在开发过程中(但为什么?)。删除之前:我想确定WordPress不需要这个,因为我从未遇到过一些奇怪的情况。浏览自定义主题中的文件时,我看不到对该目录的任何引用。一些网络搜索