你可以在短码中添加ifgetecho语句吗?

一段时间以来,我一直在创建自定义快捷码来帮助显示我的Wordpress网站上的各种信息,而不需要创建自定义的页面帖子模板,而且它的效果非常好。

我最近也在实施高级自定义字段插件,相对于我原来在自定义帖子类型中添加元框,它改善了我开发网站的方式。

当创建自定义帖子模板时,我可以使用这样的东西来显示信息。

<?php if(get_field('email_address'))
{ echo '<a href="mailto://' .get_field('email_address') . '">EMAIL</a></div>'; }
?>

基本上,如果它有信息,就会显示,否则,什么都不做。我有我的问题,想不通的地方,有没有办法在add_shortcode详情里有一个if get语句?

下面是一个短码,它列出了一个目录下的教堂位置和它的细节,但在某些情况下,他们不会有所有的信息。当它只是像物理地址这样的普通文本时,这很容易,就像什么都没有一样–什么都没有显示,因为包装那部分文本没有像padding这样的CSS。

我遇到问题的地方是像电子邮件或网站这样的东西。即使他们没有提供这两样东西,编码仍然会显示 “电子邮件 “或 “网站 “的文本,但显然没有链接。理想的情况是–这个文本根本不会被显示。

因此,是否可以在add_shortcode编码中加入if get类型的语句来实现这个功能?

这是我目前使用的编码。预先感谢任何援助和建议。

add_shortcode( 'directory' , 'Directory' );

function Directory($atts) {

$atts = shortcode_atts( array(
    'category' => ''
), $atts );

$categories  = explode(',' , $atts['category']);

$args = array(
        'post_type'     => 'church-directory',
        'post_status'   => 'publish',
        'orderby'         => 'title',
        'order'         => 'ASC',
        'posts_per_page'=> -1,
        'tax_query'     => array( array(
                            'taxonomy'  => 'category',
                            'field'     => 'term_id',
                            'operator' => 'AND',
                            'terms'     => $categories
                        ) )
    );

    $string = '';
    $string .= '<div style="margin-top: -30px;">';
    $query = new WP_Query( $args );

    if( ! $query->have_posts() ) {
        return false;
    }

    while( $query->have_posts() ){
        $query->the_post();
        $string .= '<div id="directoryWrapper">';
        $string .= '<div><h1><a style="text-transform: uppercase;" href="' .get_field('custom_url') . '">' . get_the_title() . '</a></h1></div>';
        $string .= '<div>' .get_field('address') . '</div><div style="clear: both;"></div>';
        $string .= '<div>' .get_field('phone_number') . '&nbsp;&nbsp;';
        $string .= '<a href="mailto://' .get_field('email_address') . '">EMAIL</a>&nbsp;&nbsp;';
        $string .= '<a href="' .get_field('custom_url') . '">WEBSITE</a></div><div style="clear: both;"></div>';
        $string .= '</div>';
    }

    $string .= '</div>';
    wp_reset_postdata();

    return $string;

}

解决方案:

所以,我想通了……这里是最终的代码,以防止它帮助别人想做类似的事情。

    add_shortcode('directory', 'Directory');
    function directory($atts){

    $atts = shortcode_atts( array(
    'category' => ''
), $atts );

    $categories  = explode(',' , $atts['category']);

$args = array(
        'post_type'     => 'directory',
        'post_status'   => 'publish',
        'orderby'         => 'title',
        'order'         => 'ASC',
        'posts_per_page'=> -1,
        'tax_query'     => array( array(
                            'taxonomy'  => 'category',
                            'field'     => 'term_id',
                            'operator' => 'AND',
                            'terms'     => $categories
                        ) )
    );

ob_start();

$my_query = new WP_Query( $args );
if( $my_query->have_posts() ) {
    ?>
        <?php
        while ($my_query->have_posts()) : $my_query->the_post(); ?>


        <div id="directoryWrapper">
        <h1><a style="text-transform: uppercase; font-weight: 600;" href="' .get_field('custom_url') . '"><?php the_title(); ?></a></h1>
        <?php if(get_field('address')) { echo '' . get_field('address') . ''; } ?>
        <?php if(get_field('phone_number')) { echo '<br>' . get_field('phone_number') . '&nbsp;'; } ?>
        <?php if(get_field('email_address')) { echo '<a href="mailto://' .get_field('email_address') . '">EMAIL</a>&nbsp;'; } ?>
        <?php if(get_field('custom_url')) { echo '<a href="' .get_field('custom_url') . '">WEBSITE</a>'; } ?>
        <div style="clear: both;"></div>
        </div>


        <?php endwhile; ?>
    <?php 
}
wp_reset_query();//reset the global variable related to post loop
$retVal = ob_get_contents();
ob_end_clean();

return $retVal;
    }

给TA打赏
共{{data.count}}人
人已打赏
解决方案

React - 使用 react-numeric-input 在本地存储中持久化状态。

2022-4-20 14:01:25

解决方案

我有一个for循环想绘制多个图形,但它们是互相绘制的,我到底做错了什么?

2022-4-20 14:01:28

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索