Как использовать одну кнопку вместо разных ссылок?

Как использовать одну кнопку вместо разных ссылок? | n-wp.ru Вопросы
👍 Научим создавать сайты на WordPress бесплатно за 19 уроков. Подробнее →

У меня проблема заключается в том что я использую один и тот же шаблон для одной из категорий. И в этом шаблоне есть дополнительная кнопка. Кнопка -«ЗАГРУЗИТЬ» И в каждой новости у меня есть ссылки для скачивания информации. И я хочу чтобы эту ссылку для скачивания задействовать кнопкой -«ЗАГРУЗИТЬ». И ссылку в статье убрать. А то в статье ссылка есть. и кнопка -«ЗАГРУЗИТЬ» не работает. Так как на одну кнопку одна ссылка. Как мне это сделать?

Создай свой первый сайт на WordPress

Chipsed
Оцените автора
Добавить комментарий

  1. tiaurus

    Насколько я понял, вы хотите сделать кнопку-ссылку, которая показывалась бы по вашему желанию в постах определенной категории? Это можно реализовать через произвольное поле:
    1. Если произвольное поле заполнено (например, содержит url ссылки), то в посте отображается кнопка-ссылка.
    2. Если произвольное поле не заполнено, то кнопка-ссылка не отображается.

    В одном из своих блогов я реализовал это так.
    Код для functions.php:

    //блок произольных полей СКАЧАТЬ/ПОСМОТРЕТЬ
    add_action('admin_init', 'my_extra_fields_2', 1);
    
    function my_extra_fields_2() {
        add_meta_box( 'extra_fields_2', 'Скачать / Открыть', 'extra_fields_box_func_2', 'post', 'normal', 'high'  );
    }
    
    function extra_fields_box_func_2( $post ){
    ?>
    <table width="100%"><tr>
        <td>
    	    <label style="font-size:0.90em;font-weight:600;color:#000">название</label>
    		<input type="text" name="extra[soft_name]" value="<?php echo get_post_meta($post->ID, 'soft_name', 1); ?>" style="width:95%" />
    	</td>
        <td>
            <label style="font-size:0.90em;font-weight:600;color:#000">скачать (ссылка)</label>	
    	    <input type="text" name="extra[dl_url]" value="<?php echo get_post_meta($post->ID, 'dl_url', 1); ?>" style="width:95%" />
    	</td>
        <td>
            <label style="font-size:0.90em;font-weight:600;color:#000">открыть (ссылка)</label>	
    	    <input type="text" name="extra[dm_url]" value="<?php echo get_post_meta($post->ID, 'dm_url', 1); ?>" style="width:95%" />
    	</td>
    </tr></table>	
    	<input type="hidden" name="extra_fields_nonce_2" value="<?php echo wp_create_nonce(__FILE__); ?>" />
    <?php
    }
    
    add_action('save_post', 'my_extra_fields_update_2', 0);
    
    function my_extra_fields_update_2( $post_id ){
        if ( !wp_verify_nonce($_POST['extra_fields_nonce_2'], __FILE__) ) return false;
    	if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE  ) return false;
    	if ( !current_user_can('edit_post', $post_id) ) return false;
    
    	if( !isset($_POST['extra']) ) return false;	
    
    	$_POST['extra'] = array_map('trim', $_POST['extra']);
    	foreach( $_POST['extra'] as $key=>$value ){
    		if( empty($value) )
    			continue delete_post_meta($post_id, $key);
    
    		update_post_meta($post_id, $key, $value);
    	}
    	return $post_id;
    }
    

    Код для шаблона:

    <?php $my_meta = get_post_custom_values( 'dl_url', $ID ); if ( $my_meta) : ?>
    	<div class="download">
    	    <a rel="nofollow" target="_blank" title="Скачать <?php $my_meta = get_post_custom_values( 'soft_name', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?>" href="<?php $my_meta = get_post_custom_values( 'dl_url', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?>">Скачать <?php $my_meta = get_post_custom_values( 'soft_name', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?></a>
        </div>
    <?php endif; ?>
    <?php $my_meta = get_post_custom_values( 'dm_url', $ID ); if ( $my_meta) : ?>
        <div class="demo">
            <a rel="nofollow" target="_blank" title="Открыть <?php $my_meta = get_post_custom_values( 'soft_name', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?>" href="<?php $my_meta = get_post_custom_values( 'dm_url', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?>">Открыть <?php $my_meta = get_post_custom_values( 'soft_name', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?></a>
        </div>
    <?php endif; ?>
    

    Код для шаблона нужно вставлять в single.php или в другой шаблон (например, в index.php) внутри цикла вывода постов.

    Ответить
  2. Chipsed автор

    Вот спасибо тебе Tiaurus. Все работает.

    Ответить
  3. Chipsed автор

    Подскажите пожалуйста как сделать чтобы появилась еще одна дополнительная кнопка?

    Ответить
  4. Chipsed автор

    Сделал как надо. Но не дождался ответа. Чтобы сделать дополнительные кнопки нужно добавить код между

    <td>
            <label style="font-size:0.90em;font-weight:600;color:#000">скачать (ссылка)</label>    
            <input type="text" name="extra[dl_url]" value="<?php echo get_post_meta($post->ID, 'dl_url', 1); ?>" style="width:95%" />
        </td>
        <td>
            <label style="font-size:0.90em;font-weight:600;color:#000">открыть (ссылка)</label>    
            <input type="text" name="extra[dm_url]" value="<?php echo get_post_meta($post->ID, 'dm_url', 1); ?>" style="width:95%" />
        </td> 

    вставить

    <td>
             <label style="font-size:0.90em;font-weight:600;color:#000">скачать (ссылка2)</label>    
             <input type="text" name="extra[dl_url-2]" value="<?php echo get_post_meta($post->ID, 'dl_url-2', 2); ?>" style="width:95%" />
         </td>

    потом нужно в этом метакоде

    function my_extra_fields_update_2( $post_id ){
        if ( !wp_verify_nonce($_POST['extra_fields_nonce_2'], __FILE__) ) return false;
        if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE  ) return false;
        if ( !current_user_can('edit_post', $post_id) ) return false;
    
        if( !isset($_POST['extra']) ) return false; 
    
        $_POST['extra'] = array_map('trim', $_POST['extra']);
        foreach( $_POST['extra'] as $key=>$value ){
            if( empty($value) )
                continue delete_post_meta($post_id, $key);
    
            update_post_meta($post_id, $key, $value);
        }
        return $post_id;
    }

    Найти строчку

    if( empty($value) )
                continue delete_post_meta($post_id, $key);

    и заменить ее на

    if( empty($value) ) {
    delete_post_meta($post_id, $key);
    continue;
    }
    Ответить