如何使用自定义属性在不同页面上设置不同的背景?

时间:2011-07-20 作者:Andrija

这个问题并没有那么复杂(与我将要写的描述相比:),但我希望尽可能正确地解决这个问题(例如,我可能在Home.php上做错了),所以我将给出整个上下文。作为我设计的一部分,该页面显示不同的背景图像。为此,我使用了超大的“使用jQuery库构建的全屏背景幻灯片”。我的一些页面使用一个背景图像(显然没有幻灯片:),一些页面使用三个。此外,我还使用javascript检测用户监视器的分辨率,并为其提供适当的图像大小:

var imageToBeLoaded = "images/bg_index.jpg";
$(document).ready( function () {
if(window.screen.width > 1024) {
  imageToBeLoaded = "images/bg_index_large.jpg";
}});
因此,问题是:

a) 首页。php不是一个可以通过WP Admin访问的页面,所以我不能给它自定义字段。

解决方案:if (isHome()){ setDefaultalues();}

b) 如果我不在主页上,我需要获取自定义字段键/值,但只针对与图像背景相关的属性(正如我之前所说,任何页面都有1到N个背景图像)。例如,“我的关于”页面有5个属性,bgImg1, smallImg1, bgImg2, smallImg2greeting text. 这意味着我需要获取所有变量并解析名称,以便获取例如。bgImg1bgImg2. 此外,Supersized还需要一个文本描述作为另一个参数,因此页面还需要另外两个参数,desc1desc2 我还需要将其与适当的bgImg 因此,我可以生成如下输出(从静态页面):

{image : \'images/bg_rwanda.jpg\', title : \'Rwanda Home\'}, {image : \'images/bg_rwanda2.jpg\', title : \'Rwanda School\'}

伪代码如下所示:

var output = "{image : \'";
var imageIsLarge= false;
if (getResolution() > 1024 ) { imageIsLarge= true; }
while (hasNextProperty()){
  Property prop = nextProperty();
  if (imageIsLarge) {
      if (prop.getKey().startsWith (bgImageL)){
         output += prop.getValue()+", title:";
         // etc. Also, I need to set the code to first get the first img, 
         // not just in any order and pair it with the first  description
现在这似乎有点复杂,我觉得我可以做得更简单,但我不知道怎么做。

1 个回复
SO网友:chrisguitarguy

您可以使用get_post_meta().

Wordpress有一个名为wp_localize_script() 顾名思义,它习惯于通过从PHP数组创建javascript对象来本地化脚本。使用wp\\u enqueue\\u script()将脚本添加到wordpress前端时,可以通过调用wp_localize_script() 之后如果需要从自定义字段或数据库中的其他位置将值获取到某种javascript对象中,这可能是最简单的方法。不完全是什么wp_localize_script 是为,但它会完成工作。

下面是一个示例:

add_action( \'wp_print_scripts\', \'wpse23525_add_scripts\' );
function wpse23525_add_scripts()
{

    // Only for single posts
    if( !is_single() ) return;

    wp_enqueue_script( \'wpse23525_script\', \'path/to/script.js\', array( \'jquery\' ) );

    // We should have $post by now, but get it if not
    global $post;
    if( empty( $post ) ) $post = get_queried_object();

    $localize = array( 
        \'some_key\'      => get_post_meta( $post->ID, \'some_key\', true ),
        \'another_key\'   => get_post_meta( $post->ID, \'another_key\', true ),
        \'one_more\'      => get_post_meta( $post->ID, \'one_more\', true )
    );

    wp_localize_script( \'wpse23525_script\', \'wpse23525_obj\', $localize );
}
这会在前端显示出来(当然,值可能会改变):

<script type=\'text/javascript\'> 
/* <![CDATA[ */
var wpse23525_obj = {
    some_key: "test1",
    another_key: "test2",
    one_more: "test3"
};
/* ]]> */
</script> 
<script type=\'text/javascript\' src=\'http://localhost:8888/wp3.2path/to/script.js?ver=3.2.1\'></script> 
脚本。js将包含您计划对数据执行的所有操作,可以使用wpse23525_obj.some_keywpse23525_obj.another_key

因此:

var imageToBeLoaded = "images/bg_index.jpg";
$(document).ready( function () {
if(window.screen.width > 1024) {
  imageToBeLoaded = "images/bg_index_large.jpg";
}});
成为

var imageToBeLoaded = wpse23525_obj.another_key;
$(document).ready( function () {
if(window.screen.width > 1024) {
  imageToBeLoaded = wpse23525_obj.some_key;
}});
更多阅读:

  1. http://codex.wordpress.org/Function_Reference/get_post_meta

  2. http://codex.wordpress.org/Function_Reference/wp_enqueue_script

  3. http://codex.wordpress.org/Function_Reference/wp_localize_script

  4. http://yoast.com/get-queried-object/

结束