如何从管理面板插入图像和文本贯穿我的主题

时间:2013-10-08 作者:Derek

我想有一个管理面板,我可以上传一个图像和自定义一行文字。

然后在整个主题中使用短代码来显示文本/图像。

我还希望这是可扩展的,这样我可以添加更多的图像上传/文本输入到这个面板,因为我的网站增长。

我使用了一个教程,该教程展示了如何以类似的方式插入徽标,我将对其进行破解以供使用,但在当前版本的Wordpress中,遵循该教程似乎不起作用。

1 个回复
SO网友:gmazzap

除了使用一些无法在wp更新上工作的自定义代码(正如您所经历的那样),为什么不使用coremeta uploader?

进入后端的“媒体->添加新内容”。只需添加一个新文件。

上载后,单击“编辑”,并使用要与图像一起输出的文本行设置附件标题。Udate附件。。。你就完了。

在您的功能中。php添加如下内容

function print_an_image( $id = \'\', $args = array() ) {
  if ( ! intval($id) ) return;
  $a = get_post($id);
  if ( $a->post_type != \'attachment\' ) return;
  $default = array(
     \'size\' => \'medium\',
     \'class\' => \'\',
     \'link\' => false, // if numeric will link that post id, if boolean true will link the same image but in the size specified in \'link_size\' att. If false (default) will not insert a link
     \'link_size\' => \'full\',
     \'link_rel\' => \'\',
     \'title_format\' => \'<p class="image-title">%s</p>\',
     \'before\' => \'<div>\',
     \'after\' => \'</div>\'
  );
  $args = wp_parse_args($args, $default);
  extract($args);
  $image = wp_get_attachment_image_src( $id, $size );
  if ( ! filter_var($image[0], FILTER_VALIDATE_URL) ) return;
  $title = apply_filters(\'the_title\', $a->post_title );
  $url = \'\';
  if ( is_numeric($link) && $link > 0 ) {
    $url = get_permalink($link);
  } elseif ( $link === true || $link === \'true\' ) {
    $url = (array) wp_get_attachment_image_src( $id, $link_size );
    $url = filter_var($url[0], FILTER_VALIDATE_URL) ? $url[0] :  \'\';
  }
  $out = \'\';
  if ( is_string($before) && ! empty($before) ) $out .= $before;
  if ( ! empty($url) ) {
    $out .= sprintf(\'<a href="%s"\', esc_url($url) );
    if ( ! empty($link_rel) ) $out .= sprintf(\' rel="%s"\', esc_attr($link_rel) );
    $out .= sprintf(\' title="%s"\', esc_attr($title) ) . \'>\';
  }
  $format = \'<img src="%s" width="%d" height="%d" alt="%s"\';
  if ( ! empty($class) ) $format .= \' class="%s"\';
  $out .= sprintf($format, esc_url($image[0]), $image[1], $image[2], esc_attr($title), esc_attr($class)) . \'/>\';
  if ( ! empty($url) ) $out .= \'</a>\';
  $out .= sprintf($title_format, esc_html($title) );
  if ( is_string($after) && ! empty($after) ) $out .= $after;
  return $out;
}


function print_an_image_sh( $atts ) {
    if ( ! isset($atts[\'id\']) || empty($atts[\'id\']) ) return;
    $id = $atts[\'id\'];
    unset($atts[\'id\']);
    return print_an_image( $id, $atts );
}

add_shortcode( \'myimg\', \'print_an_image_sh\' );
最简单的用法是

[myimg id="10"] 
其中10是图像的id。它将以中等大小打印图像,标题用p包裹,两者都用div包裹。

使用shortcode atts,您可以配置所有内容:图像的大小、类、图像是否应该以其他大小链接相同的图像或链接特定的帖子、链接的“rel”属性(对于lightbox脚本很有用)、如何输出标题以及在图像前后放置的内容。

高级使用示例:

[myimg id="10" size="thumb" class="my_image_thumb" link="true" link_size="full" link_rel="lightbox" title_format="<h3>%s</h3>" before="<div class=\'my_image_wrap\'>"]
当然是print_an_image 函数也可以用作模板标记,第一个参数是图像id,第二个参数是参数数组:

echo print_an_image(10, array(\'size\'=>\'large\') );

结束

相关推荐

Custom field in a shortcode?

我无法将图像从我的一个字段转换为短代码(它与get_the_post_thumbnail($post->ID, \'thumbnail\') 但我需要字段中的值udstiller logo.function logo_shortcode( $atts ) { extract( shortcode_atts( array( \'limit\' => \'50\', \'orderby\' => \'name\',