Jump to content

Recommended Posts

Hi,

 

I am trying to add the following to a line of PHP to give a link a class.

It works fine when I do it like this and the below automatically adds the class="" part to the HTML

<section id="title" <?php job_listing_class(); ?>

But when I try the following, it doesn't work:

 $output .= '<li><a href="' . get_term_link( $subterms ) . '"    ' . job_listing_class();  . '     >' . $subterms->name;
                               if($jobs_counter=='yes'){
                                 $output .= '<span>' . $subterms->count . '</span>';
                               }
                               $output .= '</a>

 It's this part that I can't get to work:

$output .= '<li><a href="' . get_term_link( $subterms ) . '"    ' . job_listing_class();  . '     >' . $subterms->name;

Can anyone help me with the code I have?

Thanks

Share this post


Link to post
Share on other sites
Posted (edited)

It would appear that your function is echoing the class and therefore it works in the first code

EG

function job_listing_class()
{
    echo 'class="xyz"';
}

In the second code you are concatenating the output from the function but there isn't any. In this case the function would need to return a string value

EG

function job_listing_class()
{
    return 'class="xyz"';
}

Then you can

echo '<section id="title" ' . job_listing_class() . ' >';

or, in your HTML

<section id="title" <?=job_listing_class()?> >

EDIT: Generally, it is better for functions to return values.

Edited by Barand

Share this post


Link to post
Share on other sites

Hi,

Thanks for the reply.

I see what you mean. The problem I'm having is adding the actual 

<?=job_listing_class()?>

to this line of PHP:

<a href="' . get_term_link( $subterms ) . '">

 

 $output .= '<ul>';
                            foreach ($chunk as $subterms) {
                               $output .= '<li><a href="' . get_term_link( $subterms ) . '">' . $subterms->name;
                               if($jobs_counter=='yes'){
                                 $output .= '<span>' . $subterms->count . '</span>';
                               }
                               $output .= '</a></li>';
                            }
                        $output .= '</ul>';

 

Share this post


Link to post
Share on other sites

You use the <?= ...?> synatx when inserting a PHP expression into your HTML.

With your

10 minutes ago, the_toolman said:

<a href="' . get_term_link( $subterms ) . '">

you are trying to insert into a string value within your PHP code so you would just concatenate the function output as shown in my "echo" example

$output .= '<li><a href="' . get_term_link( $subterms ) . '" ' . job_listing_class() . '>' . $subterms->name;

(assuming your function now returns the string value instead of echoing it)

Share this post


Link to post
Share on other sites

Hi,

Thanks for the reply.

Yes, it's doing what you said, its echoing it:

class=""class=""class=""class=""class=""class=""class=""class=""class=""class=""class=""class=""class=""

I will see if I can work out another way.

Share this post


Link to post
Share on other sites

Ok, I have trid this which sort of does what I am wanting it to do,:

$output .= '<li class="category-item"><a href="' . get_term_link( $subterms ) . '" class="' . $subterms->name . '">' . $subterms->name;

I'm basically trying to give each item in a list of categories its own class so I can style it differently.

The above works, but it outputs the class with spaces in:

<a href="https://www.website.co.uk/phase-2/category/arts-and-crafts-competitions/" class="Arts & Crafts Competitions">Arts & Crafts Competitions<span>0</span></a>

Is there a way I can remove the spaces from the class or replace the space with a hyphen? I assume I can't use classes with spaces in.

 

Share this post


Link to post
Share on other sites

What does your job_listing_class() function look like?

Share this post


Link to post
Share on other sites

It looks like you should urlencode($subterms->name). What CMS are you using - knowing this might help you get more specific information about your problem.

Share this post


Link to post
Share on other sites

Hi,

I have come up with another solution:

$category_name = str_replace(' ', '-', strtolower($subterms->name));

This works, but it is keeping the "&" in the category names. 

for example: food-&-drink

How can I replace the "&" with "and" ?

Thanks

Share this post


Link to post
Share on other sites
17 hours ago, Barand said:

What does your job_listing_class() function look like?

 

Share this post


Link to post
Share on other sites

I am not sure where the job_listing_function is - I don't know much about PHP.

This is the contents of the page I am editing:

<?php
/*
 * Helpers
 */

function jobseek_partition( $list, $p ) {
    $listlen = count( $list );
    $partlen = floor( $listlen / $p );
    $partrem = $listlen % $p;
    $partition = array();
    $mark = 0;
    for ($px = 0; $px < $p; $px++) {
        $incr = ($px < $partrem) ? $partlen + 1 : $partlen;
        $partition[$px] = array_slice( $list, $mark, $incr );
        $mark += $incr;
    }
    return $partition;
}


/**
 * Limits number of words from string
 */
if ( ! function_exists( 'jobseek_string_limit_words' ) ) :
    function jobseek_string_limit_words($string, $word_limit) {
        $words = explode(' ', $string, ($word_limit + 1));
        if (count($words) > $word_limit) {
            array_pop($words);
            //add a ... at last article when more than limit word count
            return implode(' ', $words) ;
        } else {
            //otherwise
            return implode(' ', $words);
        }
    }
endif;

// Shortcode prints grid of categories

add_shortcode('jobs_categories', 'jobseek_jobs_categories');

function jobseek_jobs_categories( $atts ) {
    extract(shortcode_atts(array(
        'columns'      => '4',
        'orderby'      => 'count',
        'number'       => '99',
        'hide_empty'   => 0,
        'jobs_counter' => 'no',
        'type'         => 'all',
        'parent_id'    => '',
    ), $atts));

    $output = '';
    
    if( $type == 'all' ) {
     
        $categories = get_terms( array(
            'taxonomy'   => 'job_listing_category',
            'orderby'    => $orderby,
            'hide_empty' => $hide_empty,
            'number'     => $number,
        ) );

        if ( !is_wp_error( $categories ) ) {
            $output .= '<div class="category-groups columns-' . $columns . '">';
            $chunks = jobseek_partition($categories, $columns);
            foreach( $chunks as $chunk ) {
                $output .= '<ul>';
                    foreach ( $chunk as $term ) {
                        $output .= '<li><a href="' . get_term_link( $term ) . '">' . $term->name;
                        if( $jobs_counter == 'yes' ) {
                            $output .= '<span>' . $term->count . '</span>';
                        }
                        $output .= '</a></li>';
                    }
                $output .= '</ul>';
            }
            $output .= '</div>';
        }
    }  

    if( $type == 'only_parents' ) {
    
        $categories = get_terms( array(
            'taxonomy'   => 'job_listing_category',
            'parent'     => 0,
            'orderby'    => $orderby,
            'hide_empty' => $hide_empty,
            'number'     => $number,
        ) );

        if( !is_wp_error( $categories ) ) {
            $output .= '<div class="category-groups columns-' . $columns . '">';
            $chunks = jobseek_partition($categories, $columns);
            foreach ( $chunks as $chunk ) {
                $output .= '<ul>';
                    foreach ( $chunk as $term ) {
                        $output .= '<li><a href="' . get_term_link( $term ) . '">' . $term->name;
                        if( $jobs_counter == 'yes' ) {
                            $output .= '<span>' . $term->count . '</span>';
                        }
                        $output .= '</a></li>';
                    }
                $output .= '</ul>';
            }
            $output .= '</div>';
        }
    }

    if( $type == 'group_by_parents' ) {

        $parents = get_terms( array(
            'taxonomy'   => 'job_listing_category',
            'orderby'    => $orderby,
            'hide_empty' => $hide_empty,
            'number'     => $number,
            'parent'     => 0
        ));
        //CATEGORY HEADERS
        if ( !is_wp_error( $parents ) ) {
            foreach( $parents as $key => $term ) :
                $subterms = get_terms("job_listing_category", array("orderby" => $orderby, "parent" => $term->term_id, 'hide_empty' => $hide_empty));
                
                $output .= '<h3><a href="' . get_term_link( $term ) . '">'. $term->name .'</a></h3>';
                
                if( $subterms ) :           
                    $chunks = jobseek_partition($subterms, $columns);
                    foreach ($chunks as $chunk) {
                        $output .= '<div class="category-boxes ' . strtolower($term->name) . '-category-wrapper' . '">';
                            foreach ($chunk as $subterms) {
                            $category_name = str_replace(' ', '-', strtolower($subterms->name));
                               $output .= '<div class="category-item"><a href="' . get_term_link( $subterms ) . '" class="'. $category_name .'">' . $subterms->name;
                               if($jobs_counter=='yes'){
                                 $output .= '<span>' . $subterms->count . '</span>';
                               }
                               $output .= '</a></div>';
                            }
                        $output .= '</div>';
                    }
                endif;
                           
               
                
            endforeach;
        }
    }

    if( $type == 'parent' ) {

        if ( !is_wp_error( $categories ) ) {

            $subterms = get_terms( array(
                'taxonomy'   => 'job_listing_category',
                'orderby'    => $orderby,
                'hide_empty' => $hide_empty,
                'number'     => $number,
                'parent'     => $parent_id,
            ));

            $term = get_term( $parent_id, "job_listing_category" );

            if( $subterms ) {
                $output .= '<div class="category-groups"><h3 class="parent-jobs-category"><a href="' . get_term_link( $term ) . '">'. $term->name .'</a></h3>';
                       
                    $chunks = jobseek_partition($subterms, $columns);

                    foreach ( $chunks as $chunk ) {
                        $output .= '<ul>';
                            foreach ($chunk as $subterms) {
                                $output .= '<li><a href="' . get_term_link( $subterms ) . '">' . $subterms->name;
                                if($jobs_counter=='yes'){
                                   $output .= '<span>' . $subterms->count . '</span>';
                                }
                                $output .= '</a></li>';
                            }
                        $output .= '</ul>';
                    }
                       
                $output .= '</div>';
            }
        }
        
    }

    return $output;
}

add_shortcode('resume_categories', 'jobseek_resumes_categories');

function jobseek_resumes_categories( $atts ) {
    extract(shortcode_atts(array(
        'columns'         => '4',
        'orderby'         => 'count',
        'number'          => '99',
        'hide_empty'      => 0,
        'resumes_counter' => 'no',
        'type'            => 'all',
        'parent_id'       => '',
    ), $atts));

    $output = '';
    
    if( $type == 'all' ) {
     
        $categories = get_terms( array(
            'taxonomy'   => 'resume_category',
            'orderby'    => $orderby,
            'hide_empty' => $hide_empty,
            'number'     => $number,
        ) );

        if ( !is_wp_error( $categories ) ) {
            $output .= '<div class="category-groups columns-' . $columns . '">';
            $chunks = jobseek_partition($categories, $columns);
            foreach ($chunks as $chunk) {
                $output .= '<ul>';
                    foreach ($chunk as $term) {
                       $output .= '<li><a href="' . get_term_link( $term ) . '">' . $term->name . '</a></li>';
                    }
                $output .= '</ul>';
            }
            $output .= '</div>';
        }
    }

    if( $type == 'group_by_parents' ) {

        $parents =  get_terms( array(
            'taxonomy'   => 'resume_category',
            'orderby'    => $orderby,
            'hide_empty' => $hide_empty,
            'number'     => $number,
            'parent'     => 0
        ) );

        if ( !is_wp_error( $parents ) ) {

            foreach( $parents as $key => $term ) {

                $subterms = get_terms( array(
                    'taxonomy'   => 'resume_category',
                    'orderby'    => $orderby,
                    'parent'     => $term->term_id,
                    'hide_empty' => $hide_empty
                ) );

                if( $subterms ) {
                    $output .= '<div class="category-groups columns-' . $columns . '"><h3 class="parent-resumes-category"><a href="' . get_term_link( $term ) . '">'. $term->name .'</a></h3>';
                        $chunks = jobseek_partition($subterms, $columns);
                        foreach( $chunks as $chunk ) {
                            $output .= '<ul>';
                                foreach( $chunk as $subterms ) {
                                   $output .= '<li><a href="' . get_term_link( $subterms ) . '">' . $subterms->name . '</a></li>';
                                }
                            $output .= '</ul>';
                        }
                    $output .= '</div>';
                }
            }
        }
    }

    if( $type == 'parent' ) {

        if ( !is_wp_error( $categories ) ) {

            $subterms = get_terms( array(
                'taxonomy'   => 'resume_category',
                'orderby'    => $orderby,
                'hide_empty' => $hide_empty,
                'number'     => $number,
                'parent'     => $parent_id, 
            ) );

            $term = get_term( $parent_id, 'resume_category' );

            if( $subterms ) {
                $output .= '<div class="category-groups columns-' . $columns . '"><h3 class="parent-resumes-category"><a href="' . get_term_link( $term ) . '">' . $term->name . '</a></h3>';
                    $chunks = jobseek_partition($subterms, $columns);
                    foreach( $chunks as $chunk ) {
                        $output .= '<ul>';
                            foreach( $chunk as $subterms ) {
                               $output .= '<li><a href="' . get_term_link( $subterms ) . '">' . $subterms->name . '</a></li>';
                            }
                        $output .= '</ul>';
                    }
                $output .= '</div>';
            }
         }
        
    }

    return $output;
}

?>

The part where I am updating is under the comment

 //CATEGORY HEADERS

Share this post


Link to post
Share on other sites

I used this in the end:

 

$cat_name  = $subterms->name;
$amp = array(" & ");
$and   = array("-and-");
$category_name = str_replace($amp, $and, strtolower($cat_name) );

 

Share this post


Link to post
Share on other sites

Or you could have just said:

$cat_name = str_replace('&', 'and ', strtolower($cat_name));

No need to define arrays for this purpose nor to create a second field to hold category name.

  • Like 1

Share this post


Link to post
Share on other sites

Thanks for the reply.

 

I ended up with this code to remove spaces too.

I now have an issue with the category's displaying a comma in the classes, for example:

<span class="movies,-film-and-tv"></span>

Could anyone tell me how can I remove the comma from the string?

$cat_name  = $subterms->name;
                $amp = array('&', ' ');
                $and   = array('and', '-');              
                $category_name = str_replace($amp, $and, strtolower($cat_name) );
                $category_name = str_replace( ',', '', $cat_name);

Thanks

Share this post


Link to post
Share on other sites

Describe  to yourself (or someone else if that helps) what the last two lines of code are doing.

Share this post


Link to post
Share on other sites

Sorry, that last line wasn't meant to be there... that we me trying to replace the  comma with "nothing" to remove it.

$category_name = str_replace( ',', '', $cat_name);

 

Share this post


Link to post
Share on other sites

STOP creating NEW VARIABLES!!  That is your problem here!

Share this post


Link to post
Share on other sites

IF you don't understand what I said above, take a fresh look at the code I provided you earlier and read it carefully and try to understand what you are doing differently.

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.