2340条评论

  1. 您好,又来请教一个问题,我看了看网上的关于“wordpress打开页面以新标签的形式”,根据我的我的网站实际情况,我希望在“商店“一栏点击商品会以新标签页的形式出现,这样顾客也不会看完一个商品再点返回键,更方便。按照网上的一些讲解,我做了调整,但是两种情况都不好:1,包括点击下一页都会以新标签页形式出现;2,点击一个商品,它的确以新标签页出现了,但是我没有关闭这个商品页面,再去点击另一个商品,第二个商品不是新页面,它把第一个商品页面给覆盖刷新了。

    不知道你了解这个问题吗?

    1. 我用jquery给所有产品链接加了target=”_blank”属性,没发现你说的问题,所有点击都是新窗口打开,不会替换已经打开的。代码如下

      add_action( 'wp_footer', 'open_in_new_window');
      function open_in_new_window(){
      ?>
      <script>jQuery(document).ready(function($){$('a[href*="/product/"]').attr('target', '_blank');});</script>
      <?php
      }
      

      代码假定jquery已经加载,且woocommerce的permalink custom base是product
      在firefox、chrome和ie里试过,你用的啥浏览器,代码怎么写的。

      1. 我就是按照网上说的方法,在head加了那个了target=”_blank”。你的给所有商品链接加属性是怎么加的,在哪一个文件里修改

  2. Hi Sola,
    我的网站采用wordpress,首页index.php里面使用下面的代码来输出不同分类下面对应文章,分类是采用自定义分类法,
    由于我需要输出多个不同分类的内容(以列表的形式表现),我现在的做法是把下面的代码复制了10遍,去输出对应分类,想请教php里面怎样合并这个请求?
    网上找资料说可以把数据储存在数组里面,然后调用,没搞定,希望能帮助我

    <?php
    $args = array(
    'post_type' => 'post', //自定义文章类型名称
    'showposts' => 3, //输出的文章数量,这个可以是缺省值,不用设置
    'posts_per_page' => 1,//筛选分类置顶文章
    'post__in' => get_option( 'sticky_posts' ),//筛选分类置顶文章
    'ignore_sticky_posts' => 1,//筛选分类置顶文章
    'tax_query' => array(
    array(
    'taxonomy' => 'area_usa',//自定义分类法名称
    'terms' => array(7), //id为7的分类。提问所指的分类就是这个?
    ),
    )
    );
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : $my_query->the_post();?>

    <?php get_template_part( 'home', 'list' ); ?>
    <?php endwhile; wp_reset_query(); //重置query查询
    }
    ?>

    1. 你可以先把这段代码封装成一个函数,而不是复制几遍。然后尝试引入缓存机制,如果你文章不是更新的非常快的话。http://codex.wordpress.org/Transients_API

  3. solagirl,你好,问个问题,这个问题困扰我好长时间了
    当在后台设置固定链接为 /archives/postname/ ,作者页面、附件、分类、tag等等页面前面也会自动增加 /archives/,这个有没有办法去掉?分类、tag可以在后台重新设定,作者页面等等这些呢?

    意思就是 后台设置固定链接为 com/archives/postname/ ,作者页面 com/author/author-name/ ,或者 文章页面为com/post-type/postname/ ,作者页面com/author/author-name/

    不知道我表述清楚了没有,期待得到你的回复

    1. 这就是WordPress设定的工作方式,要改只能用代码。比如你把固定链接设置成只用postname的,然后用代码单独修改post的固定链接,放在functions.php
      PS. 代码改固定链接经常出问题,这段我没深入测试过。

      // 为post单独设置permalink规则
      add_filter( 'pre_post_link', 'test' );
      function test( $permalink ){
      	return '/archives/%postname%/';
      }
      
      // 添加post的rewrite规则,需要重新保存固定链接
      add_action( 'init', 'custom_post_rewrite_rule' );
      function custom_post_rewrite_rule(){
          add_rewrite_rule(
              'archives/([^/]+)(/[0-9]+)?/?$',
              'index.php?name=$matches[1]&page=$matches[2]',
              'top' );
          
          add_rewrite_rule(
              'archives/([^/]+)/comment-page-([0-9]{1,})/?$',
              'index.php?name=$matches[1]&cpage=$matches[2]',
              'top' );
      }
      

      代码放好,把固定链接改回postname的,保存就可以了。

      如果想维持现在的设置,也可以装custom permalink插件,把category和tag的链接一个一个的改了,但author的改不了

  4. 你好, 最近 遇到个问题,在安装ubermenu插件后,网站的打开速度从2s 延长到25s,经过判断是插件链接到map.googleapis.com网站的js,在插件中搜索 google 关键词 强制注释 有关内容可是还是加载js,请问 该如何删除该条js 或如何解决这个问题。

    1. 这插件可以在菜单里显示谷歌地图,得去掉这功能,我没看过代码,不清楚怎么禁用。这是付费插件,问作者更省事。

  5. 您好 我一个客户用的windows主机 说wordpress后台很慢 有时候后台的有的页面打不开 想问下有什么解决方法吗

  6. sola 好,我在首页模板里面添加了一个woocommerce shortcode,结果打开前台直接就显示了这个调用的代码 [recent_products per_page=”12″ columns=”3″ orderby=”date” order=”desc”] , ps: 这个代码在shop页面是正常工作的,,,
    请问这是啥原因呢

    1. 你是在编辑器里输入的吗,那要看看你首页模版到底怎么写的,有没有the_content(),shortcode需要通过do_shortcode函数才能显示内容。

  7. 您好 我想咨询下wordpress发送邮件的问题 我的机子不支持mail函数 使用wp mail smtp配置了下 这种情况只能用wp mail smtp配置的邮箱给自己发送邮件吗
    比如 我有个联系表单 第一个输入框是客户email字段 第二个字段是textarea内容字段 点击提交后 还是使用wp mail smtp设置的邮箱作为发件人邮箱吗 可不可以让客户填写的邮箱作为发件人邮箱呢

    1. 用smpt是对的,但让客户填写发件人邮箱等同于伪造地址,可能被你自己的服务器拒绝发送,更有可能被接收邮件的服务器标记为垃圾邮件。

      1. 哦哦 是这样 这个客户说自己给自己发邮件 不好 让实现用客户填写的邮箱作为发件人邮箱 请问这该如何实现呢

        1. 实现起来没什么难度,看文档http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_mail_from
          难的是能不能保证邮件可以发出去

        2. 你可以注册一个在你域名下的邮箱,试试from地址填这个可不可以发送。

        3. 您好 我好像没表达清楚我的问题 我做的是一个外贸网站 每个产品详情页都有个咨询表单 访问这个网站的用户可以通过这个表单填写自己的邮件 这个邮件地址肯定是不同访客填写的都不一样的吧 我的这个雇主是想让访客填写的邮箱作为邮件发件人邮箱

        4. “访客填写的邮箱作为邮件发件人邮箱”不就是contact form 7 的默认设置么,一般都能发出去,即使是伪造地址,只是能不能收到比较成问题。

        1. action和filter的学习在于理解原理,文章很多,你可以找找看,但不看铁定是学不会的。

        2. 我觉得先看一下WordPress初始化过程,理解wp渲染一个页面需要经过哪些阶段。
          然后看一下do_action和apply_filter函数的源代码,看懂了就完全明白了。

    1. 我只负责做项目,手头项目量还可以,只做过外国的,所以就不再花时间找国内的活做了,不想搞的太累。实话实说的话,是讨价还价能力太差,做国外的按小时算钱,客户也不强求非要开个tracker啥的,舒服点。以前接到过你推荐的客户,再次表示衷心的感谢!

  8. 不好意思,又来请问问题
    想问 Woocommerce Customer invoice顾客购物明细信件为什么都不会发出呢?
    其他的新订单、订单完成都是可以正确发出的

  9. 又来麻烦一下你,我的网站又出了些问题,为什么我在网站进到产品页,商品全部显示同一个商品的特色图像,满屏幕都是一个商品图,我试着清除缓存,把W3t插件也删除了,只有重新载入页面,才会恢复正常,但是再次进入商店,还是会出现某个页面全屏显示一个图

    1. w3c和woocommerce兼容问题官网有文档说明,不知你看过没。另外看下卸载说明,是不是w3c移除的不彻底。

      1. 没能找到。。。能给我个链接吗?这两天一直忙着网站宣传,总有顾客反映页面出现重复,困扰死我了,太想解决这个问题了,等我整好了,你买东西,我给大大的优惠。。

        1. 好的,多谢了,我自己先折腾,不行了我再找人吧,淘宝有一些帮忙整问题的,你觉得靠谱吗,

        2. 淘宝上的服务我没试过,不好评价。如果你的预算较少,就先试试我说过的测试站排除法,因为缓存只是把动态页面保存成静态html文件。像你说的只有特色图像不对,别的都对,感觉原始页面好像有问题,你用的共享主机还是vps?w3t插件只有vps以上才有使用价值,而且需要配置object cache和memcache之类的,不然还不如直接用wp super cache。当然,这些都是比较常见的问题,你网站的特有的问题还是要找人具体看,要提供hosting信息的,如果淘宝找,找个评价高一点的吧。

        3. 共享主机,先买了三个月的,准备8月初到期升级别的,我先去看看排除故障,删除W3tc插件,wp-content/cache/page_enhanced/xiepu24.com,这个文件夹应不应该动

  10. Woocommere用户填写订单内容时,姓名分开填写,先名后姓,这按照外国人的习惯,但是国内总感觉很蹩脚,而且在查看订单时显示:帅 董 其实应该是董帅
    这个是主题原因还是Woocommerce可以改写

  11. 正在使用Woocommerce,卖鞋子的,怎么能够在商品页提供选择尺码的按钮还是什么下拉框的,可能我还没发现这个设置在哪,或者这个功能需要购买,特来询问一下,希望您能帮到我,多谢了

  12. 我最近在搞一个网关的集成 但是网关不是标准的 接口 可以

    第一不能返回自定义数据

    第二返回的数据 和woo的订单ID没有关联 !我设置了 一个KEY分发脚本 会被 网关引用并返回 这个脚本生成的 KEY会和SKU绑定
    我现在需要 在 第三方 页面 对 根据SKU 处理订单

    例如
    if (!$_POST){
    $POST = $_POST;
    if($POST [STATUS] ==’ACTIVE’)
    $order->payment_complete();// (目前这里不工作)

    }

    Array
    (
    [FIRST_NAME] => bing
    [LAST_NAME] => LEE
    [COMPANY] =>
    [EMAIL] => info@iiexe.com
    [PHONE] =>
    [FAX] =>
    [COUNTRY] => China
    [STATE] => china
    [CITY] => mu dan jiang huayuan
    [ZIP] => 157000
    [ADDRESS] => china hei long jiang mu dan jiang
    [LICENSE_CODE] => 8A7B746AD5
    [EXPIRATION_DATE] => 10000-01-01
    [DATE_UPDATED] => 2014-07-12 09:52:54
    [AVANGATE_CUSTOMER_REFERENCE] => 423921760
    [EXTERNAL_CUSTOMER_REFERENCE] =>
    [CHANGED_BY] => CUSTOMER
    [LICENSE_TYPE] => REGULAR
    [DISABLED] => 0
    [RECURRING] => 0
    [LICENSE_PRODUCT] => 4625764
    [START_DATE] => 2014-07-12
    [LICENSE_LIFETIME] => 1
    [PARTNER_CODE] =>
    [PSKU] =>
    [ACTIVATION_CODE] => 3221-5642-644.2-2-5153.6-7
    [STATUS] => ACTIVE
    [EXPIRED] => 0
    [TIMEZONE_OFFSET] => GMT+08:00
    [HASH] => 6bb316620f6e507c58d42e641207daab
    )

    1. 不好意思,请问你用的是什么网关?我就假设网关是第三方站点,只要网关把数据post给你的woocommerce网站,你那段代码就会执行,至于$order->payment_complete();,我不知道你有没有创建$order这个变量呢,一般要根据订单id来初始化该变量。不管你的网关能返回什么数据,都要想办法把订单id找出来才行。

      1. 恩确实是 这么回事 我使用REST API搞定了完成账单的问题 !
        我集成的网关 是avangate 不是标准网关接口 需要get数据到该网关 而get数据就是已经在avangate网站上已经建立的产品ID
        返回是可以返回 订单号的!是get返回 但是我希望使用IPN通知的 post接收数据 但是我并不明白woo购物车的支付过程!
        甚至不知道怎么初始化$order 您能帮助我写一个简单的例子吗 例如 localhost get—> https://www.solagirl.net?order_id=x –>post—>localhost 这样的过程

        1. 用get或post都没问题,如果post不能直接传回订单id,也要传一个和订单id有唯一关系的识别字段,woocommerce中订单是通过WC_Order这个class处理的,有$order_id的情况下用$order = new WC_Order( $order_id );初始化。 IPN通知的例子,参考paypal的就可以,woocommerce文件夹下的class-wc-gateway-paypal.php,看一下function successful_request( $posted )和private function get_paypal_order( $custom, $invoice = '' )

        2. 是这样就能在wp任何页面对账单做处理吗

          $order_id =$_GET[‘order_id’]
          function successful_request( $posted ) {
          global $woocommerce;
          $order = new WC_Order( $order_id );
          $order->payment_complete();
          }

          还是这样
          function process_payment( $order_id ) {
          global $woocommerce;
          $order = new WC_Order( $order_id );

          // Mark as on-hold (we’re awaiting the cheque)
          $order->update_status(‘on-hold’, __( ‘Awaiting cheque payment’, ‘woocommerce’ ));

          // Reduce stock levels
          $order->reduce_order_stock();

          // Remove cart
          $woocommerce->cart->empty_cart();

          // Return thankyou redirect
          return array(
          ‘result’ => ‘success’,
          ‘redirect’ => $this->get_return_url( $order )
          );
          }

        3. 另外要使用IPN方式,你的网关站点必须支持才行,比如paypal允许你传一个notify_url过去,woo的代码里是这样产生的
          $this->notify_url = WC()->api_request_url( ‘WC_Gateway_Paypal’ );
          这样异步通知会被发送到这个地址,站点接收后进行处理就行了。

        4. IPN是支持 在 avangat 后台返回数据
          但是 并不支持POST方式提交只能使用GET方式提交 并且返回GET方式 的数据 或者 在ava 后台设置IPN返回地址进行 回传POST请求

        5. 第一段代码$order_id需要在function内部声明,才能被内部的代码访问。另外我想你可能没弄明白第三方网关和woocommerce的关系,woocommerce对支付有自己的要求,你需要先满足它的框架,根据它的框架把你网关的api加进去。比如你的网关既有同步的get方式返回,也有异步post方式通知,就可以参考paypal网关的写法,你可以直接copy paypal网关,放进自己的网关插件里,重命名class,把里面的东西都替换。

          比如你的class叫WC_Gateway_Avangate,notify url就写成
          $this->notify_url = WC()->api_request_url( ‘WC_Gateway_Avangate’ );

          一些标准的函数需要保留,比如创建后台选项的
          // Load the settings.
          $this->init_form_fields();
          $this->init_settings();
          function init_form_fields() {…}

          不需要的功能就去掉,例如,你的站点不支持测试账号,则$this->testurl可以直接删除。
          总之一句话,把paypal网关当成模版来使用,有用的留没用的删,把Avangate的网关api放进去。

          在回答下你的问题,首先successful_request函数是处理异步通知的,也就是用户已经完成付款后。
          process_payment是用户点击place order后执行的函数,产生一些用户付款需要的表单,比如生成一个order表单并发送到paypal,不要把这俩混为一谈。

          第一个函数至少应该这样写

          function successful_request( $posted ) {
          $order_id = $_GET['order_id];
          $order = new WC_Order( $order_id );
          //至少需要检查一下网关返回的值,判断付款是否成功,再执行下面的代码。
          $order->payment_complete();
          }
          

          另外这是给异步通知用的,异步通知一般不用get方式。

          网关没有标准不标准的说法,只要你在写woocommerce的网关,就一定要符合woocommerce的标准。

        6. 太感谢你了 solagirl 先生/女士,我简直无以言表!
          我快被woo搞疯了 !
          你无私的帮助.给我减少了好多不必要的麻烦!

  13. woocommerce这么设置用户添加购物车后弹出继续浏览和结算小框框,现在网站是添加购物车后可以直接跳购物车和不跳,只提示已成功添加。可以用什么插件实现?

  14. function 里的代码

    /********** NOVARO DEFINITION *************/
    define('THE_THEMENAME', 'elgrande');
    define('THE_SHORTNAME', 'novaro');
    define('THE_INITIAL', 'nvr');
    define('THE_LANG', 'novaro');
    define('THE_PARENTMENU_SLUG', 'nvrtheme-settings' );
    define('THE_SITEURL', site_url() );
    define('THE_ADMINURL', admin_url() );
    define('THE_FRAMEWORKPATH', get_template_directory() . '/framework/' );
    define('THE_FRAMEWORKURI', get_template_directory_uri() . '/framework/' );
    define('THE_STYLEURI', get_stylesheet_directory_uri() . '/');
    define('THE_STYLEPATH', get_stylesheet_directory() . '/');
    define('THE_CSSURI', get_template_directory_uri() . '/css/' );
    define('THE_JSURI', get_template_directory_uri() . '/js/' );
    define('THE_ENGINEPATH', get_template_directory() . '/engine/' );
    define('THE_WIDGETPATH', get_template_directory() . '/widgets/' );
    /********** END NOVARO DEFINITION *************/

    //Connecting to Novaro Framework
    require_once THE_FRAMEWORKPATH . 'framework-connector.php';

    //Starting the theme setting
    require_once THE_ENGINEPATH . 'engine-start.php';

    //Settings the theme options
    require_once THE_ENGINEPATH . 'theme-options.php';

    感觉是调用了别处的内容,但是我找不到,请帮忙 谢谢!

  15. 你好,sola,
    我的这个主题底部的版权信息www.warminside.net,实在想修改一下,尤其是时间,显得很短,还有作者的链接。
    但是好像隐藏了。
    我看了footer.php 中代码和function.php 中代码 都没有找到 请帮我看看
    我把代码贴出来
    footer.php里的代码

    <!– FOOTER –>
    <div id="outerfooter">
    <div class="container">
    <div id="footercontainer" class="row">
    <footer id="footer" class="twelve columns">
    <div class="copyrightcontainer">
    <div class="copyright"><?php nvr_footer_text(); ?></div>
    <div class="footerright"><?php nvr_footer_text2(); ?></div>
    <div class="clearfix"></div>
    </div>
    </footer>
    <div class="clearfix"></div>
    </div>
    </div>
    </div>
    <!– END FOOTER –>

    1. 调节数量按钮默认就有,只要你产品有加入购物车按钮。
      meta是指tag之类的吗,这种主题应该默认有啊
      attributes是针对variable产品的,如果是simple product,在attributes编辑框里选中在商品也显示,会显示到Additional Information里。
      如果你不清楚woocommerce的具体用法,建议你先使用WordPress默认主题twentytwelve,并安装woocommerce demo数据

      1. 可能是我没有表述清楚,我给商品添加了几个自定义属性值,以attributes形式发布的,比如生产地,生产厂家,包装规格等,meta 我不太清楚怎么用,不过我看官方把编码和分类规到了meta里,我想要实现的是在商店首页里商品列表显示这些内容,并且有那个quantity框,这次再帮忙给看看?

        1. 不好意思没法看,你说的东西woocommerce默认都有,没显示出来只能说你的主题有特殊写法,只能具体看主题才知道。

        2. so good,正是我想要的文章,这个quantity框让我很头疼,attributes和meta 我直接拷贝模板代码基本上能够实现,就是排版成了问题,我是想弄成列表样式,本以为这些属性能像wordpress那样的代码一句话能搞定的,。。。

    2. . This means all we need to do is add a little bit of javascript to update this data attribute
      这句话说了怎么加,就是下面那段js代码,不过要根据你模版结构调整一下selector

    1. 你去woocommerce设置里看看catalog images的尺寸是不是150×150,若不是可以参考我这篇文章https://www.solagirl.net/woocommerce-related-product-layout-control.html

    1. 你是想把确认订单及付款方式选择放在不同步骤里吗?要做到真正的多步骤付款,修改起来不简单。

  16. 大神,我是新人, 初用wootique这个主题,请问这个主题自带的英文 该怎么译成中文呢 ,比如Featured Products和Recent Products,我装了个CodeStyling Localization的插件,装了zh_Cn.po文件了,为什么还是英文呢,不能转成中文吗,还是哪里改代码可以改成中文。还有一个问题就是添加好一个商品后在商品详情页里 有编码:N/A的字样,请问这该怎么解决呢?

    1. 只有po不行,还要生成mo文件,插件里不是有generate mo按钮吗,翻译完了点一下。
      后面那种情况我没遇到过,不会用的话装woocommerce的测试数据学习一下。

      1. 我在index.php的代码里好像看到 如果我直接改代码改成 页面马上有效果,那这样改可以吗,会有什么影响吗?

        1. 我在index.php的代码里好像看到 _e( ‘Featured Products’, ‘woothemes’ );如果我直接改代码改成 _e( ‘精选商品’, ‘woothemes’ );页面马上有效果,那这样改可以吗,会有什么影响吗?