V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
YAFEIML
V2EX  ›  问与答

[半吊子码农]wordpress 后台选项和 php 替换

  •  
  •   YAFEIML · 2014-11-14 13:15:17 +08:00 · 2714 次点击
    这是一个创建于 3670 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前是写在php文件里面,$replace3 = array('1','2','3');,每次更新比较麻烦都要改PHP文件
    现在在WP后台整了个主题设置,整了2个字段
    get_option('ed2k_replace3')
    get_option('ed2k_replace4')

    前台代码是这样的
    $replace_i3 = get_option('ed2k_replace3');
    $replace_i4 = get_option('ed2k_replace4');
    $torrent_nameok = str_ireplace(stripslashes($replace_i3),stripslashes($replace_i4),substr_utf8($torrent_name,0,65));

    那么问题来了,在后台怎样才能像PHP里面实现数组的效果比如array('1','2','3');

    比如每一行一个词语,或者用,分割之类的
    第 1 条附言  ·  2014-11-14 15:16:44 +08:00
    搞定了,
    用explode就可以了
    14 条回复    2014-11-14 16:11:05 +08:00
    DearTanker
        1
    DearTanker  
       2014-11-14 13:41:39 +08:00
    我也想知道这段关于PHP正则查询代码会出错的问题,该怎么办?

    if ($s) {$title = preg_replace('/('.implode('|', $keys) .')/iu','<span style="color:#f40f40;text-decoration:underline;">\0</span>',$title);} ?>

    具体错误是没办法找到“*”。会报错

    Warning: preg_replace(): Compilation failed: nothing to repeat at offset
    feiyuanqiu
        2
    feiyuanqiu  
       2014-11-14 13:53:42 +08:00
    @DearTanker *是一个正则符号 需要在前面加个反斜杠 \*
    DearTanker
        3
    DearTanker  
       2014-11-14 15:16:46 +08:00
    @feiyuanqiu 擦,认真看了一下,发现是我表达有问题

    「具体错误是没办法找到“*”」的意思是,我在搜索框里面输入“*”号进行搜索会出错。

    上面那段正则表达式的作用是关键词高亮。
    abelyao
        4
    abelyao  
       2014-11-14 15:18:22 +08:00
    半吊子码农你好… 我每天都能看到你上来问几个问题,爱学习的孩子,要给你点个赞先
    DearTanker
        5
    DearTanker  
       2014-11-14 15:20:31 +08:00
    @feiyuanqiu 就像:
    http://www.huging.com/?s=\*

    http://www.huging.com/?s=*

    请问、这段代码可以优化吗?

    顺手贴一下代码:

    <?php newtheme_switch('header.php') ?>
    <div id="content">

    <div class="goods<?php if(is_mobile()){echo ' ajax';}else{ ajax_ias();} ?>">

    <?php if(have_posts()):query_posts($query_string .'&showposts='.newtheme_showposts());
    echo '<p id="prompt">以下是为您搜索到的信息,如果没有您想要的,可尝试缩短或更换关键词。</p>';
    while(have_posts()):the_post();
    $title = get_the_title();
    $keys = explode(" ",$s);
    if ($s) {$title = preg_replace('/('.implode('|', $keys) .')/iu','<span style="color:#f40f40;text-decoration:underline;">\0</span>',$title);} ?>
    <article>
    <a class="thumbnail" href="<?php the_permalink() ?>" title="<?php the_title(); ?>"<?php target_blank() ?>>
    <?php newtheme_thumbnail() ?>
    </a>

    <?php if(newtheme_cn('links','link_url')):
    if(newtheme_cn('goods','widget')): ?>
    <span class="ali_625"><a data-type="0" biz-itemid="<?php ali_goods_id() ?>" data-tmplid="625" data-rd="2" data-style="2" data-border="0" href="#"></a></span>
    <?php else : ?>
    <a class="buy" href="<?php links_url() ?>" rel="nofollow noopener" target="_blank"><?php links_title() ?></a>
    <?php endif;endif ?>

    <h2>
    <a href="<?php the_permalink() ?>" title="详细阅读:<?php the_title() ?>"<?php target_blank() ?>><?php echo $title ?></a><?php if(newtheme_cn('goods','subhead')):?><span class="subhead"><?php echo newtheme_cn('goods','subhead') ?></span><?php endif ?>
    </h2>

    <p class="info">
    <time class="icon-time"><?php the_time( get_option('date_format') ) ?></time>
    <span class="cat icon-star"><?php newtheme_ie('分类:');the_category('、') ?></span>
    <?php newtheme_like('<span class="icon-like"></span>',' 喜欢') ?>
    </p>

    <p class="desc"><?php echo newtheme_excerpt(120) ?> <a href="<?php the_permalink() ?>" class="readmore" title="详细阅读:<?php the_title() ?>"<?php target_blank() ?>>查看全文</a></p>

    </article>
    <?php endwhile; else:

    echo '<p id="prompt">非常抱歉,无法搜索到您可能需要的信息,我们为您随机推荐了以下文章。</p>';

    $cat = get_option('cat_limit');
    $showposts = newtheme_showposts();
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $args = array(
    'order' => DESC,
    'orderby' => 'rand',
    'cat' => $cat,
    'post__not_in' => get_option('sticky_posts'),
    'showposts' => $showposts,
    'paged' => $paged
    );
    query_posts($args);
    while (have_posts()) : the_post();
    if(is_mobile()){
    include('mobile/goods.php');
    }else{
    include('pc/goods.php');
    }
    endwhile;wp_reset_query();

    endif;
    ?>

    <?php newtheme_paging() ?>

    </div>

    </div>

    <?php newtheme_switch('footer.php') ?>
    feiyuanqiu
        6
    feiyuanqiu  
       2014-11-14 15:25:07 +08:00
    @DearTanker 我明白你的意思。
    if ($s) {
    $title = preg_replace('/('.implode('|', $keys) .')/iu','<span style="color:#f40f40;text-decoration:underline;">\0</span>',$title);
    }
    你这段代码的作用是 通过构造正则匹配式把$title中的搜索项$keys高亮出来
    当你搜索*时,实际构造出来的正则是:'/key1|*|key2/iu' *在正则里面表示匹配0或多个,这里就出问题了
    如果要搜索*,需要给*加反斜杠 \*,也就是最终构造出来的正则应该是:'/key1|\*|key2/iu' 这样才行。
    DearTanker
        7
    DearTanker  
       2014-11-14 15:28:40 +08:00
    @feiyuanqiu 对,= =关键是怎么改,我试着把\添加了几个地方发现都不行= =,PS:我不懂代码T.T
    watsy0007
        8
    watsy0007  
       2014-11-14 15:34:32 +08:00
    基本所有语言里面都关于字符串类型都会有1个函数。
    split,专门用于拆解字符串为数组
    msg7086
        9
    msg7086  
       2014-11-14 15:52:09 +08:00   ❤️ 1
    @DearTanker 你是把用户输入的内容直接当成正则来搜
    那么必然用户输入的内容 *得是正则才行*。
    要么自己写搜索算法,要么就把原始输入里是正则关键字的那些部分转义掉。典型的比如
    . * + { } [ ] ( ) | ^ $ \
    都是要转义的。
    feiyuanqiu
        10
    feiyuanqiu  
       2014-11-14 15:59:30 +08:00   ❤️ 1
    @DearTanker 这个时候就该去招人了...

    或者把这段代码加上去将就用下,没有仔细测试,可能有bug...
    if ($s) {
    // 下面这段是新添加的,放在这里就行
    $keys = preg_replace('/(\\' . implode('|\\', array('\\', '^', '$', '*', '+', '?', '{', '}', ',', '?', '.', '(', ')', '[', ']', '-')) . ')/i', '\\\\$0', $keys);
    // 原代码
    $title = preg_replace('/('.implode('|', $keys) .')/iu','<span style="color:#f40f40;text-decoration:underline;">\0</span>',$title);
    }
    WildCat
        11
    WildCat  
       2014-11-14 16:04:57 +08:00 via iPhone
    unserialize()

    serialize()
    DearTanker
        12
    DearTanker  
       2014-11-14 16:07:21 +08:00
    @feiyuanqiu 太感谢了,这段代码可以用,完美解决,以后只要出现错误的符号就在array里面加一个就好了,哈哈,真心感谢。。

    这博客只是我平时抽点时间维护的,哪有“招人”的概念。哈哈。
    DearTanker
        13
    DearTanker  
       2014-11-14 16:07:46 +08:00
    @msg7086 还有你,感谢啦~
    feiyuanqiu
        14
    feiyuanqiu  
       2014-11-14 16:11:05 +08:00
    ....啊啊啊啊,上面我的代码作废
    $title = preg_replace('/('.implode('|', array_map('preg_quote', $keys)) .')/iu','<span style="color:#f40f40;text-decoration:underline;">\0</span>',$title);
    echo($title);

    这样就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1009 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:59 · PVG 02:59 · LAX 10:59 · JFK 13:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.