主题将PHP代码转换为短码

时间:2016-10-13 作者:JoaMika

我的主题使用以下代码,我正在尝试将其转换为短代码,以便在自定义模板上使用:

<div class="x-breadcrumb-wrap">
      <div class="x-container max width">

        <?php x_breadcrumbs(); ?>

      </div>
    </div>
我知道我必须在我的functions.php 但无法理解语法。

add_shortcode( \'mycrumbs\', \'mytest_breadcrumbs\' );
更新时间:

为了便于使用,我只需要调用函数x\\u breadcrumbs。我的主题将此功能定义为:

function x_breadcrumbs() {

    if ( x_get_option( \'x_breadcrumb_display\' ) ) {

      GLOBAL $post;

      $is_ltr         = ! is_rtl();
      $stack          = x_get_stack();
      $delimiter      = x_get_breadcrumb_delimiter();
      $home_text      = x_get_breadcrumb_home_text();
      $home_link      = home_url();
      $current_before = x_get_breadcrumb_current_before();
      $current_after  = x_get_breadcrumb_current_after();
      $page_title     = get_the_title();
      $blog_title     = get_the_title( get_option( \'page_for_posts\', true ) );

      if ( ! is_404() ) {
        $post_parent = $post->post_parent;
      } else {
        $post_parent = \'\';
      }

      if ( X_WOOCOMMERCE_IS_ACTIVE ) {
        $shop_url   = x_get_shop_link();
        $shop_title = x_get_option( \'x_\' . $stack . \'_shop_title\' );
        $shop_link  = \'<a href="\'. $shop_url .\'">\' . $shop_title . \'</a>\';
      }

      echo \'<div class="x-breadcrumbs"><a href="\' . $home_link . \'">\' . $home_text . \'</a>\' . $delimiter;

        if ( is_home() ) {

          echo $current_before . $blog_title . $current_after;

        } elseif ( is_category() ) {

          $the_cat = get_category( get_query_var( \'cat\' ), false );
          if ( $the_cat->parent != 0 ) echo get_category_parents( $the_cat->parent, TRUE, $delimiter );
          echo $current_before . single_cat_title( \'\', false ) . $current_after;

        } elseif ( x_is_product_category() ) {

          if ( $is_ltr ) {
            echo $shop_link . $delimiter . $current_before . single_cat_title( \'\', false ) . $current_after;
          } else {
            echo $current_before . single_cat_title( \'\', false ) . $current_after . $delimiter . $shop_link;
          }

        } elseif ( x_is_product_tag() ) {

          if ( $is_ltr ) {
            echo $shop_link . $delimiter . $current_before . single_tag_title( \'\', false ) . $current_after;
          } else {
            echo $current_before . single_tag_title( \'\', false ) . $current_after . $delimiter . $shop_link;
          }

        } elseif ( is_search() ) {

          echo $current_before . __( \'Search Results for \', \'__x__\' ) . \'&#8220;\' . get_search_query() . \'&#8221;\' . $current_after;

        } elseif ( is_singular( \'post\' ) ) {

          if ( get_option( \'page_for_posts\' ) == is_front_page() ) {
            echo $current_before . $page_title . $current_after;
          } else {
            if ( $is_ltr ) {
              echo \'<a href="\' . get_permalink( get_option( \'page_for_posts\' ) ) . \'">\' . $blog_title . \'</a>\' . $delimiter . $current_before . $page_title . $current_after;
            } else {
              echo $current_before . $page_title . $current_after . $delimiter . \'<a href="\' . get_permalink( get_option( \'page_for_posts\' ) ) . \'">\' . $blog_title . \'</a>\';
            }
          }

        } elseif ( x_is_portfolio() ) {

          echo $current_before . get_the_title() . $current_after;

        } elseif ( x_is_portfolio_item() ) {

          $link  = x_get_parent_portfolio_link();
          $title = x_get_parent_portfolio_title();

          if ( $is_ltr ) {
            echo \'<a href="\' . $link . \'">\' . $title . \'</a>\' . $delimiter . $current_before . $page_title . $current_after;
          } else {
            echo $current_before . $page_title . $current_after . $delimiter . \'<a href="\' . $link . \'">\' . $title . \'</a>\';
          }

        } elseif ( x_is_product() ) {

          if ( $is_ltr ) {
            echo $shop_link . $delimiter . $current_before . $page_title . $current_after;
          } else {
            echo $current_before . $page_title . $current_after . $delimiter . $shop_link;
          }

        } elseif ( x_is_buddypress() ) {

          if ( bp_is_group() ) {
            echo \'<a href="\' . bp_get_groups_directory_permalink() . \'">\' . x_get_option( \'x_buddypress_groups_title\' ) . \'</a>\' . $delimiter . $current_before . x_buddypress_get_the_title() . $current_after;
          } elseif ( bp_is_user() ) {
            echo \'<a href="\' . bp_get_members_directory_permalink() . \'">\' . x_get_option( \'x_buddypress_members_title\' ) . \'</a>\' . $delimiter . $current_before . x_buddypress_get_the_title() . $current_after;
          } else {
            echo $current_before . x_buddypress_get_the_title() . $current_after;
          }

        } elseif ( x_is_bbpress() ) {

          remove_filter( \'bbp_no_breadcrumb\', \'__return_true\' );

          if ( bbp_is_forum_archive() ) {
            echo $current_before . bbp_get_forum_archive_title() . $current_after;
          } else {
            echo bbp_get_breadcrumb();
          }

          add_filter( \'bbp_no_breadcrumb\', \'__return_true\' );

        } elseif ( is_page() && ! $post_parent ) {

          echo $current_before . $page_title . $current_after;

        } elseif ( is_page() && $post_parent ) {

          $parent_id   = $post_parent;
          $breadcrumbs = array();

          if ( is_rtl() ) {
            echo $current_before . $page_title . $current_after . $delimiter;
          }

          while ( $parent_id ) {
            $page          = get_page( $parent_id );
            $breadcrumbs[] = \'<a href="\' . get_permalink( $page->ID ) . \'">\' . get_the_title( $page->ID ) . \'</a>\';
            $parent_id     = $page->post_parent;
          }

          if ( $is_ltr ) {
            $breadcrumbs = array_reverse( $breadcrumbs );
          }

          for ( $i = 0; $i < count( $breadcrumbs ); $i++ ) {
            echo $breadcrumbs[$i];
            if ( $i != count( $breadcrumbs ) -1 ) echo $delimiter;
          }

          if ( $is_ltr ) {
            echo $delimiter . $current_before . $page_title . $current_after;
          }

        } elseif ( is_tag() ) {

          echo $current_before . single_tag_title( \'\', false ) . $current_after;

        } elseif ( is_author() ) {

          GLOBAL $author;
          $userdata = get_userdata( $author );
          echo $current_before . __( \'Posts by \', \'__x__\' ) . \'&#8220;\' . $userdata->display_name . $current_after . \'&#8221;\';

        } elseif ( is_404() ) {

          echo $current_before . __( \'404 (Page Not Found)\', \'__x__\' ) . $current_after;

        } elseif ( is_archive() ) {

          if ( x_is_shop() ) {
            echo $current_before . $shop_title . $current_after;
          } else {
            echo $current_before . __( \'Archives \', \'__x__\' ) . $current_after;
          }

        }

      echo \'</div>\';

    }

  }
endif;

2 个回复
SO网友:Nabil Kadimi

这应该可以做到,我使用了输出缓冲ob_start()ob_get_clean:

<?php

/**
 * Breadcrumbs based on theme\'s functions
 *
 * @author  Nabil Kadimi <[email protected]>
 * @link    http://wordpress.stackexchange.com/a/242547/17187
 */
add_action( \'init\', function() {
    add_shortcode( \'mycrumbs\', function() {

        /**
         * Start capturing output.
         */
        ob_start();

        ?>
        <div class="x-breadcrumb-wrap">
            <div class="x-container max width">
                <?php x_breadcrumbs(); ?>
                <?php if ( is_single() || x_is_portfolio_item() ) : ?>
                    <?php x_entry_navigation(); ?>
                <?php endif; ?>
            </div>
        </div>
        <?

        /**
         * Stop capturing output and return what was captured to WordPress.
         */
        return ob_get_clean();

    } ); // add_shortcode( \'mycrumbs\', closure );
} ); // add_action( \'init\', closure );

SO网友:rudtek

试试这个?

function mytest_breadcrumbs() {

$crumbs =\'<div class="x-breadcrumb-wrap"><div class="x-container max width">\';
$crumbs.=x_breadcrumbs();
if ( is_single() || x_is_portfolio_item() ) {
$crumbs.=x_entry_navigation();
}
$crumbs.=\'</div></div>\';


    // Code
return $crumbs;
}
add_shortcode( \'mycrumbs\', \'mytest_breadcrumbs\' );
然后用[我的面包屑]

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\