Jump to content

syntax help


the_toolman

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

Link to comment
Share on other sites

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
Link to comment
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>';

 

Link to comment
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)

Link to comment
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.

 

Link to comment
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

Link to comment
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

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

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.